闭包的问题

来源:2-2 新的声明方式let(下)

Bruce_Ly

2020-11-22

for(var i =0;i<3;i++){
(function(j){
setTimeout(function(){
console.log(j)
},1000)
})(i)
}
对于这个闭包的例子,我没有明白闭包的含义,我是否可以这样理解:
var i=0时,由于出现了一个闭包,i这个变量开辟的内存,没有被释放掉,
所以,当i =1时,运行环境又重新为i 开辟了另外1块内存i=1 .
当i =2时,运行环境又重新为i 开辟了另外2块内存i=2
所以运行环境总共给i 开辟了3块内存,当console.log(2)执行完后,这3块内存才被释放掉。
经常听说闭包容易出现内存没被释放掉的信息,这个例子中不存在吧?

写回答

1回答

谢成

2020-11-22

当内部函数在定义它的作用域的外部被引用时,就创建了该内部函数的闭包,如果内部函数引用了位于外部函数的变量,当外部函数调用完毕后,这些变量在内存不会被释放,因为闭包需要它们.

0
2
谢成
回复
Bruce_Ly
闭包的作用是保护变量不被内存回收机制回收。如果要回收,可以设置null
2020-11-24
共2条回复

JavaScript ES(6-11)全版本语法 前端都需要的基础课

前端无门槛学习,从ES6到ES11,一套课程掌握JS最新语法

1329 学习 · 296 问题

查看课程