JavaScript-js闭包循环绑定会不会引起内存泄漏

发布于 2017-06-24 20:31:21 字数 254 浏览 1219 评论 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){
return function(){alert(i);}
})(i);
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夜无邪 2017-10-05 04:26:13

闭包可能会引起内存泄漏,你的写法似乎不是闭包吧。

清晨说ぺ晚安 2017-09-23 23:35:18

你这个写法:

id.onclick=(function(i){}(i));

这个部分的匿名函数中并没有创建一个局部变量,因此当这个函数执行之后应该不会发生内存泄露问题。

闭包通俗的讲,就是函数外面想获得函数里面的局部变量,因此我们让这个函数返回一个子函数用来访问这个函数内部的局部量。

闭包产生内存的泄露的原因也正是因为我们想要获得这个函数内部的局部变量,因此这个函数执行之后,局部变量并不会立刻释放,因为它的值被我们取用了。

当我们不断的创建闭包,才会使内存不断的被占用,具体的代码你可以参照楼上

瑾兮 2017-08-14 04:14:29

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)
}

我认为这样才会有泄露产生

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文