Javascriptでは、var
は機能スコープまたはグローバルスコープです。ブロックスコープが必要な場合もあります。 ES6以前は、ブロックスコープをエミュレートする唯一の方法はでした。 (ES6はlet
とconst
紹介しています。)例えば
、function(){}()
ラッパーで
var callbacks = [];
for (var i = 0; i < 10; i++) {
var callback = (function() {
var index = i;
return function() {
console.log('i = ' + i);
console.log('index = ' + index);
};
})();
callbacks.push(callback);
}
、すべてのコールバックは、自分のindex
変数を持っています。 i
はラッパーの外側にあり、共有されています。我々はcallbacks[5]()
を起動した場合、それは
i = 10
index = 5
がfunction(){}()
構築物は、時には略して「すぐに、呼び出される関数式」、または「生命維持」と呼ばれているログです。
変数myvarは、外部関数から返された関数への参照として終了します。それは共通のイディオムです。外部関数は、返された関数が使用する変数を宣言して初期化することができます。 – Pointy
をご覧ください。http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Derek