javascript闭包理解

試著忘記壹切 提交于 2020-02-12 03:52:10

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 不要随便更改父函数内部变量值;

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!