1、如何从外部读取局部变量
eg:
function f1(){
        n = 999;
        function f2(){
          console.log(n);//999
    }
}
解读:f1内部所有变量对f2可见,但f2内部局部变量对f1不可见。子对象会一级一级向上寻找所有父对象的变量。
function f1(){
        var n = 999;
        function f2(){
                console.log(n)
        }
        return f2;
}
var result = f1();
result();//999
2、闭包的通俗定义
闭包就是能够读取其他函数内部变量的函数,而在javascript中只有函数的子函数才能读取局部变量,所以可以定义闭包的概念:定义在一个函数内部的函数。
闭包的作用:
a、读取函数内部的变量
b、让变量的值始终保存在内存中
eg:
function f1(){
        var n = 999;
        nadd = function(){
          n = n+1;
    }
    function f2(){
      console.log(n)
    }
    return f2;
}
var result = f1();
result();//999
nadd();
result();
解读:result实际上闭包了函数f2、局部变量一直在内存中,因为f2调用后并没有将变量n销毁,值一直存在,所以必须注意内存的消耗。