扫码关注官方订阅号
fn函数中的变量a没有在第一次调用结束后被销毁而是一直在增加 这算不算闭包
认证高级PHP讲师
闭包是有权访问另一个函数作用域的变量的函数。 简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
--------------------复制粘贴的分割线------------------------
在这个例子上理解为两个要点:
包含(fn())的是一个封闭的函数
fn()
在包含fn()的封闭函数之外,可以调用fn(),在调用了之后才能算形成了闭包
所以这里不算闭包
薛定谔的闭包23333
闭包在JavaScript中存在的相当广泛,按照其基本定义而言,只要是内部函数引用外部作用域变量,这一行为就是闭包,这是广义上的说法。 从比较严格的意义上来说,这并不能算闭包。因为闭包函数必须要在定义它的词法作用域之外运行,才能够称为闭包。在你这个例子中fn函数的定义和运行时在同一个词法作用域,所以这是不算的。
fn
这个不是闭包,变量a处于全局作用域。函数fn执行的时候,先查找了自己的作用域,再向上查找。如果你实在不了解闭包是什么,可以借助chrome的调试工具来加深了解。
for(var t=0;t<length;t++){
(function (t){ xxxxxxxxxxxxxx })(t);
}
这个应该不算闭包,闭包是为了不污染包外环境的变量,更少的干涉就有更稳定可靠的程序行为,你这个例子中已经影响到包外的变量,也就是产生了数据污染。
这个肯定不算啊,变量a根本就不是函数fn中的变量,它是一个全局变量;闭包的定义:当函数可以访问并记住所在作用域时(全局作用域除外)就产生了闭包;还有就是2楼的建议很好,是不是闭包,在chrom浏览器里检测一下就好了
闭包的定义是,函数外部可以访问函数内部的变量。这个只是在函数内部自增了全局的变量。
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
闭包是有权访问另一个函数作用域的变量的函数。
简单的说,Javascript允许使用内部函数---即函数定义和函数表达式位于另一个函数的函数体内。而且,这些内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数。当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。
--------------------复制粘贴的分割线------------------------
在这个例子上理解为两个要点:
包含(
fn())的是一个封闭的函数在包含
fn()的封闭函数之外,可以调用fn(),在调用了之后才能算形成了闭包所以这里不算闭包
薛定谔的闭包23333
闭包在JavaScript中存在的相当广泛,按照其基本定义而言,只要是内部函数引用外部作用域变量,这一行为就是闭包,这是广义上的说法。
从比较严格的意义上来说,这并不能算闭包。因为闭包函数必须要在定义它的词法作用域之外运行,才能够称为闭包。在你这个例子中
fn函数的定义和运行时在同一个词法作用域,所以这是不算的。这个不是闭包,变量a处于全局作用域。函数fn执行的时候,先查找了自己的作用域,再向上查找。
如果你实在不了解闭包是什么,可以借助chrome的调试工具来加深了解。
for(var t=0;t<length;t++){
}
这个应该不算闭包,闭包是为了不污染包外环境的变量,更少的干涉就有更稳定可靠的程序行为,你这个例子中已经影响到包外的变量,也就是产生了数据污染。
这个肯定不算啊,变量a根本就不是函数fn中的变量,它是一个全局变量;闭包的定义:当函数可以访问并记住所在作用域时(全局作用域除外)就产生了闭包;还有就是2楼的建议很好,是不是闭包,在chrom浏览器里检测一下就好了
闭包的定义是,函数外部可以访问函数内部的变量。这个只是在函数内部自增了全局的变量。