に自己呼び出し関数内の変数の寿命は何ですか:私は、次のコードを理解しようとしてきたのjavascript
var add = (function() {
var counter = 0;
return function() {return counter += 1;}
})();
add();
add();
add();
ここadd
は匿名の自己呼び出し関数の戻り値を割り当てられている - ということは、機能はfunction() { return counter += 1 }
です。今すぐ初めてadd()
が呼び出されると、期待通りに1
が返されます。しかし、2回目にadd()
と呼ばれると、2
が返されます。
私の質問は、counter
が関数内で定義されているので、関数が実行を終了するたびにcounter
が死んでしまうのではないでしょうか?つまり、add()
への最初の呼び出し後に1が表示されます。今我々はその機能から外れているので、counter
はそれが以前の値を忘れて、automatic
のようなスタックから破壊されるべきではない?
http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – mplungjan
クロージャの世界へようこそ。私は、この概念を匿名関数の概念とはっきりと区別するために、自己呼び出し関数(IIFE)ではなく通常の関数を使って遊ぶことをお勧めします(90年代後半から2000年初頭の早い段階でコミュニティの多くの人々が一部の他の言語では匿名関数がクロージャと呼ばれることには役立ちません) – slebetman
[auto]タグはC++ 11固有のものであり、除去された。将来あなたの質問にタグを付ける方法に注意してください。 –