私は次のような明らかにモジュールパターンを使用しています:
var SomeClosure = function () {
var SomeInnerVar = 4;
function InnerGetTheVar() {
return SomeInnerVar;
}
function InitClosure() {
// there's something else happening here that requires me to
// wait for document.ready before initializing the closure
setInterval(IncreaseSomeInnerVar, 10000);
}
function IncreaseSomeInnerVar() {
SomeInnerVar = SomeInnerVar + 1;
}
InitClosure();
return {
GetTheVar: InnerGetTheVar
}
}
$(document).ready(function () {
SomeClosure = SomeClosure();
});
コンソールで次のように入力すると、なぜでしょうか。
SomeClosure.GetTheVar = 2;
SomeClosure.GetTheVar; // outputs 2!
SomeInnerVar
クロージャーが保護されないのはなぜですか? 外側のスコープで SomeInnerVar をそのように変更できるようにしたくありません。
ご提案いただきありがとうございます。