有一个关于变量回收的问题,请教各位大神,谢谢

var a = function(){    
        var i = 0;    
        return function(){
        ++i;
    } 
}()
a();//1
a();//2
var b = function(){   
         var i = 0;    
         return ++i;
}
b();//1
b();//1

对于第一个, i 由于被闭包引用所以没被回收,这是可以理解的。但是,对于第二个例子,我们不用闭包的时候之所以i每次都为0是因为每次都运行了var i= 0,这跟回收没关系吧?那怎么理解“函数运行完后变量就被回收”这句话呢?我们定义一个全局变量:var grobal = 10; 它为什么没被回收?

慕田峪8701529
浏览 1472回答 3
3回答

minip

我的理解是 1、全局变量 grobal 挂在全局对象上,除非你的全局对象销毁,否则不会被回收(比如关闭浏览器窗口)2、函数执行后,如果没有使用闭包的话,它的生命周期应该就结束了,变量就被回收,使用了闭包的话, 函数的局部变量 能被内层的 函数作用域 持有访问 所以没有被回收( js 的作用域一般是静态的,i 的值查询 应该是先从 最里层作用域开始,没有的话再向上一级作用域中查找  )
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript