下列关于闭包描述正确的是?()
A
闭包内变量执行后不会被清除
B
闭包不满足链式作用域结构
C
(Function(){})()理论上是一个闭包
D
闭包不耗内存,可以随意使用
正确答案:AC
可以用(function(){})()来构成闭包,而不是(function(){})()是闭包。这个要明确
直接写
(function(){
var a =10;
console.log(a)
})()
这叫立即执行函数,不是叫做闭包
但是有时候在for循环里面我们可以这样写,使用的是(function () {})() 这个形式产生闭包
for(var i=0; i<10; i++){
(function(j){
setTimeout(function(){
console.log(j);
},1000)
})(i)
}
链式作用域是js本身自然存在的一种获取变量的方式。链式作用域外部可以访问内部,内部访问外部需要设置一个函数,由此产生闭包。
立即执行函数(IIFE)不是一种闭包,它只是函数的一种调用方式,和闭包没有必然的联系,两者经常结合着一起使用,但两者的本质并不同