JavaScript-js闭包循环绑定会不会引起内存泄漏
var i=0;
for(;i<=1000;i++)
{
document.write('<div id="x_'+i+'">'+i+'</div>');
var id=document.getElementById('x_'+i);
id.onclick=(function(i){
return function(){alert(i);}
})(i);
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
闭包可能会引起内存泄漏,你的写法似乎不是闭包吧。
你这个写法:
这个部分的匿名函数中并没有创建一个局部变量,因此当这个函数执行之后应该不会发生内存泄露问题。
闭包通俗的讲,就是函数外面想获得函数里面的局部变量,因此我们让这个函数返回一个子函数用来访问这个函数内部的局部量。
闭包产生内存的泄露的原因也正是因为我们想要获得这个函数内部的局部变量,因此这个函数执行之后,局部变量并不会立刻释放,因为它的值被我们取用了。
当我们不断的创建闭包,才会使内存不断的被占用,具体的代码你可以参照楼上
var i=0;
for(;i<=1000;i++)
{
document.write('<div id="x_'+i+'">'+i+'</div>');
var id=document.getElementById('x_'+i);
id.onclick=(function(i){
var leak = {index:i,str:'第'+i+'个DIV'};
return function(){alert(i);alert(leak.str);/*可以看到leak变量并没有被释放*/}
})(i)
}
我认为这样才会有泄露产生