请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

闭包的问题

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块内存才被释放掉。
经常听说闭包容易出现内存没被释放掉的信息,这个例子中不存在吧?

正在回答 回答被采纳积分+3

1回答

谢成 2020-11-22 15:44:52

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

0 回复 有任何疑惑可以回复我~
  • 提问者 Bruce_Ly #1
    谢谢老师的回我,那,这个例子中,1,2,3是不是一直存在着占据着内存呀?如果这样的闭包用的太多,是不是就会浪费很多内存?这个例子中,如何如何把这,1,2,3占据的内存释放掉呢?
    回复 有任何疑惑可以回复我~ 2020-11-24 09:20:43
  • 谢成 回复 提问者 Bruce_Ly #2
    闭包的作用是保护变量不被内存回收机制回收。如果要回收,可以设置null
    回复 有任何疑惑可以回复我~ 2020-11-24 13:57:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信