永发信息网

js闭包函数为什么有内存泄漏的问题存在

答案:3  悬赏:0  手机版
解决时间 2021-04-07 11:55
  • 提问者网友:眉目添风霜
  • 2021-04-06 11:08
js闭包函数为什么有内存泄漏的问题存在
最佳答案
  • 五星知识达人网友:十鸦
  • 2021-04-06 11:15
给你写个简单的例子你就明白了
例:
function a(){
var b = 1;

//闭包

(function(){
b = 2;

})();
}
a();

说明:按理来说b时属于a中的一个局部变量,是会在调用a时创建,调用完销毁的变量,但a中有一个闭包也就是其中的匿名函数调用了b,所以内存回收认为b是被引用的,因此在回收的时候不会释放它。所以b一直存在内存中,而外部却不能调用这个变量,这就产生了内存泄漏。。。。
纯手打,求采纳。
全部回答
  • 1楼网友:执傲
  • 2021-04-06 12:20
调用c() 就是调用 a(),这个地方有问题。
a()是个闭包,里面内容就是返回b().
这个闭包的调用方式,应该这样 a()(); 所以刚才说的问题就在这里了。
var c = a(); 是将这个闭包的引用传给c.
我们是不是可以理解为 这个c现在有个成员变量i和一个成员方法b,它的返回值指向这个成员函数。
闭包的好处时,局部变量在函数返回后被访问。
也就是说,当运行了c()后,当中的变量i就被销毁了,但是却可以在成员方法b中得以保留。

可以通过调用两次c() 和 两次 a()() 来观看区别。
  • 2楼网友:像个废品
  • 2021-04-06 11:32
闭包,比如下面
var o = (function(){
var name = "";
return {
init:function(){
alert(name);
}
}
})();
上面的代码是闭包的一种实现,在执行o.init();的时候,o的作用域应该是全局的,此时init函数能访问o的局部变量name,而且,因为o是全局变量,所以闭包之内的所有变量和函数都会在执行上下文中的栈中,不会随着函数调用结束而结束。
像上面的程序如果很多一起执行,内存不会释放,当然会出现内存泄露了
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯