js的垃圾回收机制:
一句话就是不用就删掉
变量包括:全局变量与局部变量
在全局变量中 脚本运行结束
在局部变量中 函数调用产生,函数调用结束消亡
闭包:延长局部变量生命周期
思路:
1 延长一个变量生命周期
2 声明为一个全局变量
3 不想增加全局变量
4 让全局变量引用局部变量
实现:
1 函数内部存在局部变量
2 改局部函数被一个内部函数引用
3 函数的返回值为内部的函数
应用:
保护变量,只能使用对外提供的方式来访问变量
全局变量
var a = 1;
console.log(a)
//a 代码执行完毕 就消亡
局部变量
var a = 1;
function demo() {
var b = 1;
console.log(++b);
}
demo(); //2
demo(); //2
//b函数调用产生,函数调用结束消亡
//假如函数调用没有消亡 那么第二次调用返回值应该为3
闭包
function xxoo() {
var a = 1;
function fun() {
console.log(++a);
}
return fun;
}
var res1 = xxoo();
res1(); //2
res1(); //3
//由于函数内部变量不能得到释放,所以当函数res1执行第二次的时候得到的值就为3
修改后的闭包
function xxoo() {
var a = 1;
return function () {
console.log(++a);
}
}
var res1 = xxoo();
res1(); //2
res1(); //3
var res2 = xxoo();
res2(); //2
res2(); //3
//在res2函数中 返回的是一个函数,开辟新的地址 res1函数跟res2函数不是同一个函数
//所以返回值依旧还是一个为2,一个为3
再次修改后的闭包
var res = (function () {
var a = 1;
return function () {
console.log(++a);
}
})()
res();
res();
//应用:
//保护变量,只能使用对外提供的方式来访问变量