闭包产生的条件:内部函数使用外部变量+外部函数被调用(满足)

发布时间 2023-11-13 15:21:55作者: 龙陌

下列关于闭包描述正确的是?()

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)不是一种闭包,它只是函数的一种调用方式,和闭包没有必然的联系,两者经常结合着一起使用,但两者的本质并不同