闭包

202 阅读1分钟

闭包

函数运行时形成一个私有的作用域,用来保护函数体内的变量不受外界干扰。

  • 私有变量:定义在function中的变量只能在当前函数中使用
  • 共有变量:定义在window作用域的变量,全局都可以使用

高程3中的解释:

  • 当在函数内部定义了其他函数,就创建了闭包,闭包有权访问函数的内部的所有变量
  • 闭包的小应用
    function f1(){
        var n=999;
        function f2(){
            alert(n); 
        }
        return f2;
    }
    var result=f1();
    result(); // 999

闭包的用途

  • 1、读取函数内部的变量
  • 2、让这些变量的值始终保持在这个内存中
function fs(){
 var  num = 99;
 add = function(){
  num += 1;
 }
 return function fx(){
   console.log('num的值是:',num);
 }
}
var reutls = fs();
reutls()//num的值是: 99
add()
reutls()//num的值是: 100

上面这段代码中,fx函数其实就是闭包,它运行了2次,第一次的值是99,第二次的是100,这证明了在fs函数中的局部变量num,一直保存在内存中,并没有因为fs调用后自动清除。

  • 通过下面的2个例子,理解下闭包的机制
    var name = "this is window";
    var obj = {
        name : "this is obj",
        getName:function(){
            console.log('这里的name值是:',this.name);
            return function (){
                return this.name
            }
        }
    }
    obj.getName()();
    
    var name = "this is window";
    var obj = {
        name : "this is obj",
        getName:function(){
            console.log('这里的name值是:',this.name);
            var that = this;
            return function (){
                return that.name
            }
        }
    }
    obj.getName()();