2016-09-29 9 views
0

私はjavascriptを学ぶためにeloquentjavascriptを読んでいますが、この閉鎖物は私を混乱させています。 warp1は関数ではありませんが、関数のように見え、引数を取るようにも見えます。クロージャー機能はどのように機能しますか?私たちはそれを使う理由は何ですか?クロージャ機能がどのように機能しているのか分かりませんか?

function wrapValue(n) { 
    var localVariable = n; 

    return function() { return localVariable; }; 
} 

var wrap1 = wrapValue(1); 
var wrap2 = wrapValue(2); 

console.log(wrap1()); 
// → 1 

console.log(wrap2()); 
// → 2 

答えて

0

外部関数(wrapValue)は関数を返します。返された関数は変数wrap1wrap2に割り当てられます。そのため、変数から返された関数を呼び出すことができます。

私たちが次のことを見ていると分かりやすいかもしれません。

あなたが行ったようにあなたが関数を作成することができます

function foo() { return "foo"; } 

それとも、関数を変数に割り当てることができます。

var foo = function() { return "foo"; } 

あなたの閉鎖がないように、第2の例では、基本的にはまったく同じありません - 関数に変数を代入します。

は、すべてのケースでは、変数、または関数名で

foo(); 

のいずれかで関数を呼び出すことができます。

関連する問題