次のトピックを読んでいましたJavaScriptクロージャーはどのように機能しますか? そして、このコードを見つけました:
function foo(x) {
var tmp = 3;
return function (y) {
alert(x + y + tmp);
x.memb = x.memb ? x.memb + 1 : 1;
alert(x.memb);
}
}
var age = new Number(2);
var bar = foo(age); // bar is now a closure referencing age.
bar(10);
著者は次のようにコメントしています。
予想どおり、 を呼び出すたびに
bar(10)
がインクリメントされますx.memb
。予想外かもしれませんが、それx
は age 変数と同じオブジェクトを参照しているだけです! バーに数回電話した後、にage.memb
なります2
!
なぜ常に2を返すのか混乱しています。どのようにして常に 2 になるのか説明してもらえますか?