繁体   English   中英

这些是JavaScript闭包吗?

[英]Are these javascript closures?

请参阅JavaScript闭包如何工作?

闭包是:

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

  • 闭包是一个堆栈框架,当函数返回时,它不会被释放(就像“堆栈框架”被分配了而不是放在堆栈上一样!)。

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

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;**
}

1不是因为没有实际引用变量,2和3是。

在2和3中,名为text的变量是封闭的 -在其词法范围之外引用。 在1中没有。

克罗福德(Crockford)

这意味着内部函数始终可以访问其外部函数的var和参数,即使在返回外部函数之后也是如此。

所有这些都是闭包。

我不确定您的困惑是什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM