JS-闭包的原理和作用
原理
function func(){
var num=999;
function func2(){
console.log(num);
}
return func2;
}
var result=func();
result();
说白了,利用func2可以读取func的局部变量这一作用,将func2作为返回值,就可以在func的外部读取他的内部变量。
所以在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。
它的作用如下:
(1)通过闭包,可以在函数外部读取函数内局部变量的值;
(2)让局部变量始终生存在内存当中,避免被垃圾回收机制杀死。
例如,下面这个代码
function func(){
var num=999;
nAdd=function(){num+=1;}
return function (){console.log(num);};
}
var result=func();
result();
nAdd();
result();
闭包的用法注意事项
(1)因为闭包会使得函数中的变量都被保存在内存中,内存消耗很大,因此不要滥用。解决办法:在退出函数之前,将不使用的局部变量全部删除。
(2)闭包的实际调用者都是window,因此所有闭包中的this都指向了window。
例如: