2017-04-14 18 views
-2

私はいくつかのコードを読んでこれを見つけました。なぜ変数は関数を返す無名関数と同じですか?

var myvar = (function(){ 
    return function() { 
    // code here 
    } 
})(); 

なぜ私はそれがそれによって書かれたのか混乱しています。名前は、匿名で、自己実行しているようです。どのようにこれをもっときれいに書くことができますか?

+0

変数myvarは、外部関数から返された関数への参照として終了します。それは共通のイディオムです。外部関数は、返された関数が使用する変数を宣言して初期化することができます。 – Pointy

+0

をご覧ください。http://stackoverflow.com/questions/111102/how-do-javascript-closures-work – Derek

答えて

1

Javascriptでは、varは機能スコープまたはグローバルスコープです。ブロックスコープが必要な場合もあります。 ES6以前は、ブロックスコープをエミュレートする唯一の方法はでした。 (ES6はletconst紹介しています。)例えば

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(){}()構築物は、時には略して「すぐに、呼び出される関数式」、または「生命維持」と呼ばれているログです。

関連する問題