首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这句话对不对?

这句话对不对?
EN

Stack Overflow用户
提问于 2012-10-05 10:15:19
回答 5查看 87关注 0票数 5

引用斯托扬·斯特凡诺夫的面向对象的JavaScript (第84页):

如果你在a点,你就在全球范围内。如果你在b点,它在函数F的空间里,那么你可以访问全局空间和F-空间。如果你在c点,在函数N的内部,那么你可以访问全局空间,F -空间和N-空间,你不能从a到b到达,因为b在F之外是看不见的,但是如果你想从c到b,或者从N到b。有趣的事情--闭包--发生在某种程度上,当N从F中分裂出来,结束在全球空间。“

我认为上面的粗体句子应该改为“如果你在函数N内的c点,那么你可以访问全局空间和N空间”(F-空间不应该包含,因为c点只能访问N-空间和全局范围G )。

我说的对吗?谢谢。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-10-06 01:27:36

正如其他人说的那样,不。

关于闭包的全部要点是,对内部函数的外部引用不仅保持了该内部函数的活力,而且允许它访问创建它的外部环境,即使该外部环境来自已完成和返回的已执行函数。

我认为,如果蓝色N显示在F中,虚线版本(对N的引用)显示在F之外,则图表将更好地说明闭包。

所引述的声明的最后一句也可加以改进:

有趣的是,当一个对N的外部引用存在时,就会出现一个闭包。

请注意,此版本避免提及全局空间。任何外部范围都足以形成闭包。

该声明还可以进一步指出,允许形成闭包的机制是抑制垃圾收集。

警告:无论是在网络上还是在书中,对“封闭”都有许多错误的定义和描述。堆栈溢出当前标记wiki条目的“闭包”就是一个很好的例子。

票数 1
EN

Stack Overflow用户

发布于 2012-10-05 10:17:48

不,我认为它的意思是N是从函数F返回的函数,因此可以(通过闭包)访问在F中声明的变量b。例如(实例化):

代码语言:javascript
复制
function F() {
    var b = 10;
    return function () {
        console.log(b);
    };      
}

var N = F(); //N is a reference to the anonymous function returned from F

N(); //logs '10' because we still have access to b (because of the closure)
票数 2
EN

Stack Overflow用户

发布于 2012-10-05 10:17:58

不,你说的不对。

虚线圆应该表示N的真实范围,即F中的范围。

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

https://stackoverflow.com/questions/12744105

复制
相关文章

相似问题

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