当内部函数被保存到外部时,将会生成闭包。闭包会导致原有作用域链不释放,造
成内存泄露。
内存泄漏就是内存占用,内存被占用的越多,内存就变得越来越少了,就像内存被
泄露了一样
例
function a(){
function b(){
var bbb = 234;
console.log(aaa);
}
var aaa = 123;
return b;
}
var glob = 100;
var demo = a();
demo();
return b
以后,就返回出去,再销毁
fn a;
存在了外部,执行完
a
销毁
scope
时去掉
a
的连接线,但是因为
return b
把
aAO,GO
存在了外部,所以依然还是可以访问值
在第二次执行
function b
时,
aAO{num : 101}
,在
num ++
就是
102。
例
function a(){
var aa = 345;
function b(){
var bb = 234;
function c(){
var cc = 123;
}
c();
}
b();
}
a();
执行过程:
先执行
function a(){ var aa = 345;function b (){}b();}
想要执行完上面的
b();
就需要执行完
function b(){var bb = 234; function c(){}c();}
,
想要执行
c();
就要先执行完
function c(){var cc =123;},
b();
是一个复合语句,执行完
b
里面的每一句话,才能执行
b();
销毁顺序:
哪个先被执行完,哪个先被销毁
当
c
执行完,先销毁
c
自己的执行期的上下文,
当
c();
执行完,那么
b
也执行完了,就销毁
b
的执行期上下文;
当
b();
执行完,那么
a
也执行完了,就销毁
a
的执行期上下文
上一篇:
JavaScript 作用域https://blog.csdn.net/qq_38909255/article/details/122300205
下一篇: