生存周期—活多久—不再使用的东西,尽快回收
计算机资源 有限,当某个东西不再被使用,则应该自动释放该资源。即
自动垃圾回收(GC
)。—当然不是真的自动,而是需要一定规则、标准
规则: 只要一个东西(数组、对象、、、)不再被人访问----则被标记为垃圾。等待垃圾车过来收走
生存周期:
- 全局变量 一直都存在,直到页面被关闭
- 局部变量 函数/块运行时存在,函数/块结束就可以回收。具体如下:
function show(){
let a=[1,2,3];
}
//调用前---a不存在
show(); //调用中---a被创造出来
//调用后---a就是垃圾
闭包
局部变量–在函数中定义的变量,只能在当前函数中使用
当然,若是父函数、子函数的关系,则函数中可以使用父函数的局部变量----闭包
这就涉及到了生存周期问题
<body>
<button id="btn1">按钮</button>
<script>
function show() {
let a=12;
let oBtn=document.getElementById('btn1');
oBtn.onclick=function(){
alert(a);
}
}
show();
</script>
</body>
对上面的代码进行分析,函数外调用了show(); 那么是不是show()后a
这个变量就会被GC了呢?并不是!因为在show()的子级匿名函数中也用到了a,所以在onclick没有被调用,则a不会被GC。
闭包:子函数中可以使用父函数的局部变量;父函数的局部变量(本来应该在函数执行结束时就回收),因为子函数还会使用,所以延长了它的生存周期
这里有一个老式用法:—是为了替代块级作用域使用的,而现在已经有块级作用域了所以不再需要这种写法。
<script>
(function(){
alert('a');
}) ();
</script>