1.关于理解闭包之前,理解j s的链式作用域:
子对象会向上寻找所有父对象的变量,即父对象的所有变量对子对象可见;但子对象的变量对父对象不可见;
这句话也可以这么理解:
函数内部可以读取全局变量;函数外部不可以读取函数内部的局部变量;
2.需求:现在想让子对象的变量对父对象可见,或者想在函数外部可以读取函数内部的局部变量,则需要其他方法来实现,
因为 只有函数内部的子函数才能读取全局变量;所以需要 : 定义一个函数并将其作为值返回; 这就是闭包的概念;
3.概念:所以闭包的可以这样理解:能够读取其他函数内部变量的函数;
举例:
function f1() { var n = 1; // 闭包 function f2(){ console.log(n); } return f2; } var result = f1(); result(); // 1
4. 关于闭包常见作用:
4.1 如上所说的,可以读取其他函数内部的变量;
4.2 让内部变量的值始终存在内存中,不被回收;
举例:
function f1(){ var n=1; nAdd = function(){ //闭包,函数外部对内部进行操作,nAdd是一个全局变量; n+=1; } function f2(){ // 闭包 console.log(n); } return f2; } var result = f1(); result(); // 1 nAdd(); result(); //2
5.使用闭包注意事项:
5.1 因为使用闭包会消耗内存,所以在函数退出前,将不使用的变量删除;
5.2 不要随便更改父函数内部变量值;
原文:https://www.cnblogs.com/gushiyoyo/p/11130242.html