function test(){
var a=0;
var obj={};
obj.fun=function(){
return ++a;
}
return obj.fun
}
var t=test();
//t是一个函数,其内部变量是test函数的引用,test调用完毕t的作用域链不会被销毁
t();
t();
t();
alert(t());//4
test()();
test()();
test()();
alert(test()());//1
//我的理解是test每次调用都会初始化,所以结果都是1,但是test()代表的obj.fun的作用域链不会被删除不知道对不对
我的问题是test()()算闭包么,其中内存会不会被释放,还有闭包中的内存什么时候会被释放,只有关闭窗口时才会被释放么?
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
首先正面回答你算闭包。
其实闭包应该叫词法闭包或函数闭包,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。
如果说要来解释内存的状态,我做了适当的改进这样看起来更直观一点:
原则上当
test()执行完后函数体内的东西应该被销毁,但由于返回的值tt是一个function;并且里面还对a保存着引用,所以 test 执行过程中产生的a就不会被销毁,必须直到tt先被回收后才a才会被回收。你试着和是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。这句话一起理解示例,你就明白了。