私は閉鎖を理解したと思っていましたが、突然何か単純なことが働いていないようです。閉鎖状態を保持しない
私はクロージャを使ってシングルトンを作成しました。
Foobar = function() {
var data = null;
function init(obj) {
data = obj;
}
return {
init: init,
currentValue: data
}
}();
それはシングルトンですので、私は、私は「initの」関数を呼び出すとき、「データ」の値が存在する唯一のオブジェクトに変更されることを期待する:ここでは非常に縮小さバージョンがありますその値は引き続き検索で 'currentValue'を使用して使用できるようになります。ここで
は私のテストで:
Foobar.init({id:3});
var test = Foobar.currentValue;
私は、Firefox(F12)でこのコードをステップ実行すると、私はそうすることを見ることができます - 「データが」init関数に表示され、それはそれを変更していること私が 'init'を実行すると変数になります。ただし、init関数を終了して2行目のテストを実行すると、 'init'関数に渡されたオブジェクトのコピーではなく、var 'test'にnull(シングルトンが作成されたときの元の値)が割り当てられます、 私の期待通りに。
誰かが私の混乱を解消できますか?
SOは、感謝しないと言っていますが、このケースでは、あまりにも何度も、ちょっとした例や特殊な状況でバグを解決することに焦点を当てています。それが次の人を助けることに失敗し、彼らは実際の質問への一般的な答えを得るためにもう一度質問をすると、重複した質問のためにうなずく。あなたは実際に質問に答えて、「バグを修正する」よりも何かを教えてくれました。これにより、将来間違いが繰り返される可能性は低くなります。このような種類の答えが、私がそれを評価する理由です。 – JackLThornton