0

请参阅JavaScript 闭包如何工作?.

闭包是:

  • 闭包是函数的局部变量——在函数返回后保持活动状态,或者

  • 闭包是一个堆栈帧,它在函数返回时不会被释放(就好像一个'堆栈帧'被malloc'ed而不是在堆栈上!)。

只是想确认以下是否考虑关闭?

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 回答