function f1(params){
bar b =1;
return function(){
b++;
console.log(b)
}
}
var f2 = f1();
var f3 =f1();
var f4 =f1();
f2();
f2();
f4();
//没有引用,return函数
f1() // b 销毁了
f2 = null;
f3 = null;
f4 = null;
闭包 1:f1函数执行结束时,上下文销毁,变量依然存在 2:因为f1函数外部f2引用 返回的匿名函数, 又因为匿名函数中引用了 f1 中 var b。 所以b不会被销毁。
如何判断一个变量是否在内存中存在? 1:关键看:该变量是否被使用了 2:变量存在,运算就是在最后一次基础上运算的 3:变量不存在, 直接运算 报错 或者 再次初始化创建 那么运算以初始化为主
闭包特点 1:防止变量污染。
缺点 1:内存泄漏:因为:函数执行结束后,函数被应用的变量,不会被销毁 比如没执行一个函数里边的b不会被销毁
解决内存泄漏问题 零引用:f2 f3 f4 赋值null 然后b就会被销毁
undefined 与 null 的区别是什么 存在和不存在 是否占内存 undefined占内存 null不占内存