0

JavaScript クロージャーはどのように機能しますか?を参照してください。.

閉鎖は次のとおりです。

  • クロージャは関数のローカル変数です — 関数が戻った後も生き続けます、または

  • クロージャは、関数が戻ったときに割り当てが解除されないスタック フレームです (あたかも「スタック フレーム」がスタック上にあるのではなく、malloc されたかのように!)。

以下が閉鎖を考慮していることを確認したいだけですか?

1) 関数内で JavaScript 関数をバインドします。

var Books = {
    init:function(){
        $('#box').bind('click',function(){
           console.log('click'); 
        });
    }
};

Books.init();​

2) 関数内で関数を宣言する

function sayHello(name) {
  var text = 'Hello ' + name;
  var sayAlert = function() { alert(text); }
}   

var hello = sayHello();

関数内のすべての関数がクロージャーを考慮するか、返された内部関数を変数/参照として保持する関数のみを考慮するかということです。例:

function sayHello(name) {
  var text = 'Hello ' + name;
  var sayAlert = function() { alert(text); }
  **return sayAlert;**
}
4

2 に答える 2

1

1 は変数が実際に参照されていないためではなく、2 と 3 は参照されています。

2 と 3 では、text と呼ばれる変数が閉じられています- そのレキシカルスコープの外で参照されています。1では何もありません。

クロージャーのクロックフォード:

これが意味することは、外側の関数が戻った後でも、内側の関数は常に外側の関数の変数とパラメーターにアクセスできるということです。

于 2012-07-13T09:00:57.350 に答える
0

それらはすべて閉鎖です。

あなたの混乱が何であるかわかりません。

于 2012-07-13T09:01:46.843 に答える