js的闭包变量回收

首先js的变量回收规则为:
1.全局变量不会被回收。
2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
3.只要被另外一个作用域所引用就不会被回收
在牛客网中刷到的一个题:
问题:下列代码存在几个变量没有被回收?

var i = 1;
var i = 2;
var add = function() {
    var i = 0;
    return function()
{
        i++;
        console.log(i);
    }
}();
add();

答案是3个
原因:
1、首先看到全局变量第二个全局变量将地提个变量覆盖掉了,所以说只剩下一个全局的了,他不会被回收,
2、然后就是var add因为他也是一个全局变量不过他后面是一个匿名函数。
3、之后就是函数中的i验证规则中的第三句话:只要被另外一个作用域所引用就不会被回收,所以说这是一个闭包里面的变量i会被里面的函数引用所以说他也不会被回收
具体的可以看看js变量回收

猜你喜欢

转载自blog.csdn.net/weixin_47459930/article/details/106963677