首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这些是javascript闭包吗?

这些是javascript闭包吗?
EN

Stack Overflow用户
提问于 2012-07-13 08:58:57
回答 2查看 93关注 0票数 0

引用JavaScript闭包是如何工作的?

闭包是:

  • 闭包是函数返回后保持活动的函数的局部变量,或者
  • 闭包是一个堆栈帧,当函数返回时,它不会被释放(就好像‘堆栈框架’是malloc‘而不是在堆栈上!)。

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

1)在函数中绑定javascript函数。

代码语言:javascript
复制
var Books = {
    init:function(){
        $('#box').bind('click',function(){
           console.log('click'); 
        });
    }
};

Books.init();​

2)在函数中声明函数

代码语言:javascript
复制
function sayHello(name) {
  var text = 'Hello ' + name;
  var sayAlert = function() { alert(text); }
}   

var hello = sayHello();

在某些时候,我仍然不能区分哪些是闭包,就是函数中的所有函数都考虑闭包,或者只考虑将返回的内部函数作为变量/引用。示例:

代码语言:javascript
复制
function sayHello(name) {
  var text = 'Hello ' + name;
  var sayAlert = function() { alert(text); }
  **return sayAlert;**
}
EN

回答 2

Stack Overflow用户

发布于 2012-07-13 09:00:57

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

在2和3中,名为text的变量在其词法范围外被关闭引用。在1里什么都不是。

关于闭包的crockford

这意味着,即使在外部函数返回之后,内部函数始终可以访问外部函数的vars和参数。

票数 1
EN

Stack Overflow用户

发布于 2012-07-13 09:01:46

所有这些都是封闭的。

我不知道你的困惑是什么。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11467262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档