闭包
Updated:
Contents
介于平时工作中都是用各种框架,对于原生js中有的知识的认识没有那么清晰,因此有时间就在夯实基础,今天看到了“闭包”这个名字,觉得还是模棱两可,现在再来认识一下!!
觉得阮一峰老师的博客 讲得通俗易懂 链接:闭包
1、首先通过两个函数的输出来看:
var n=999;
function f1(){
alert(n);
}
f1(); // 999
function f1(){
var n=999;
}
alert(n); // error
2、从上面就能看出闭包要解决的问题——想要从外部访问内部函数的变量。
function f1(){
var n=999;
function f2(){
alert(n);
}
return f2;
}
var result=f1();
result(); // 999
我们通过在函数内部再定义一个函数 既然f2可以读取f1中的局部变量,那么只要把f2作为返回值,我们不就可以在f1外部读取它的内部变量了吗!
3、上面的f2函数就是闭包!! 因此闭包就是可以读取其他函数内部变量的函数。闭包就是连接函数内部和函数外部的一个桥梁。
4、闭包的用途:
一个是可以读取其它函数内部变量,并在父函数外部改变内部变量的值,因此使用时 不要随意改变父函数内部的值;
二是闭包会使得函数中的变量都被保存在内存中,如果内存消耗过大,影响网页性能,导致内存泄露,因此不能滥用闭包,用完在退出函数之前,将不用的变量全部删除。