javascript - 这算不算一个闭包
PHP中文网
PHP中文网 2017-04-11 12:31:29
[JavaScript讨论组]


fn函数中的变量a没有在第一次调用结束后被销毁而是一直在增加 这算不算闭包

PHP中文网
PHP中文网

认证高级PHP讲师

全部回复(7)
ringa_lee

闭包是有权访问另一个函数作用域的变量的函数。
简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。

--------------------复制粘贴的分割线------------------------

在这个例子上理解为两个要点:

  1. 包含(fn())的是一个封闭的函数

  2. 在包含fn()的封闭函数之外,可以调用fn(),在调用了之后才能算形成了闭包

所以这里不算闭包

高洛峰

薛定谔的闭包23333

闭包在JavaScript中存在的相当广泛,按照其基本定义而言,只要是内部函数引用外部作用域变量,这一行为就是闭包,这是广义上的说法。
从比较严格的意义上来说,这并不能算闭包。因为闭包函数必须要在定义它的词法作用域之外运行,才能够称为闭包。在你这个例子中fn函数的定义和运行时在同一个词法作用域,所以这是不算的。

PHP中文网

这个不是闭包,变量a处于全局作用域。函数fn执行的时候,先查找了自己的作用域,再向上查找。
如果你实在不了解闭包是什么,可以借助chrome的调试工具来加深了解。

ringa_lee

for(var t=0;t<length;t++){

(function (t){
    xxxxxxxxxxxxxx
})(t);

}

怪我咯

这个应该不算闭包,闭包是为了不污染包外环境的变量,更少的干涉就有更稳定可靠的程序行为,你这个例子中已经影响到包外的变量,也就是产生了数据污染。

迷茫

这个肯定不算啊,变量a根本就不是函数fn中的变量,它是一个全局变量;闭包的定义:当函数可以访问并记住所在作用域时(全局作用域除外)就产生了闭包;还有就是2楼的建议很好,是不是闭包,在chrom浏览器里检测一下就好了

黄舟

闭包的定义是,函数外部可以访问函数内部的变量。这个只是在函数内部自增了全局的变量。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号