闭包笔记

总结笔记

自由变量:在函数中使用,但不是形参和局部变量的变量。

经典例子

第一种方法:

var data=[];

for (var k=0; k<3; k++){
  data[k] = (function(x){
    return function(){
      alert(x) 
    };
  })(k);
}
data[0]();
data[1]();
data[2]();

第二种方法:将k改为let声明

var data=[];
 
for (let k=0; k<3; k++){
  data[k] = function(){
    
      alert(k);
   
  };
}
data[0]();
data[1]();
data[2]();

第三种方法:(callee已废除)

    var data = [];
    for (var k=0; k<3; k++){
        (data[k] = function(){
            alert(arguments.callee.x)
        }).x = k;
    }
    data[0]();
    data[1]();
    data[2]();

  


内部函数共享一个父作用域

    function foo(){
        var x = 1;
        a =  function(){
            alert(x);
        };
        x =2;
    }
    foo();
    a(); //2

  

原文地址:https://www.cnblogs.com/xuhaodong/p/xu1108.html