关于闭包的换种思维理解
/*
a();
//执行完后, y就永久消失了,因为没有任何地方再用到这个y了
function a(){
var y=5;
y=2+y;
alert(y);
}
//全局变量是不会被回收的,是在函数里面的变量执行完自己的工作之后,就会被回收,释放内存空间。
*/
/*
var y=a();
y();//弹出1
y();//弹出2
//按照作用域划分,执行完之后就是一个新的b
var z=a();
z();//弹出1,执行完之后就是一个新的b,所以是1
y();//弹出3,作用域之间的关系式并列的,毫无其他关系
function a(argu){
var x = 0;
var b=function(){
x++;
alert(x);
};
return b;
};
*/
/*
var oDiv=document.getElementsByTagName('div');
for (var i=0;i<oDiv.length ;i++ )//先执行函数体,再++
{ a(i);
alert(a(i));
function a(x){
oDiv[x].onclick=function(){alert(x)};
}
}
//内部函数条用了外部函数的变量,外部函数的变量一直都有用,一直都存在
*/
首先看第一分程序,a()执行完之后,function(){ }里面的y就不再存在了;
再看第二个函数,y(),依次弹出来1,2,3;z()插队在y()里面,弹出来的是1;
最后一个函数,无论执行多少次,依旧有存贮的a(i),其中每一个a(i),就类似于y() z(),是并列的 互不相关的作用域,相对于每个a(i)来说的内部函数都是新的。打开页面,瞬间运行完for循环,内存存储了a(0),a(1),a(2),a(3)。当点击事件触发的时候,在弹出相应的框。直到窗口关闭,这些内存才会被清空,否则一直都会存在。
总结:将全局作用域看作是一个大的闭包,执行完了之后关闭大窗口(右上角关闭),一切都清零。所以相对于大闭包(最外层的函数块)小闭包在相应的作用域使用完之后,就类似于该关闭小窗口了,一切清零。 而未清空的是对全局或者父级作用域还有用的变量,这些也会在使用完之后(右上角关闭)被清空。
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦