闭包

//1.

var data = [];

for(var i = 0; i < 3; i++) {
  data[i] = function() {
  console.log(i);
  };
}

data[0]();
data[1]();
data[2]();

//答案都是3,因为函数执行的时候,循环已经结束了,这时找i找到的是全局变量i,为3

globalContext = {
    VO: {
        data: [...],
        i: 3
    }
}
data[0] Context = {
  Scope: [AO, globalContext.VO]
}

//2.

var data = [];

for(var i = 0; i < 3; i++) {
    data[i] = (function(i) {
        return function() {
            console.log(i);
        }
    })(i);
}

data[0]();
data[1]();
data[2]();

//这时,因为是闭包,他会保存引用的变量,没有被销毁,所以是1,2,3,当然全局的i还是3,但是在匿名函数里已经找到i了,不会再往上寻找

data[0]Context = {
    Scope: [AO, 匿名函数Context.AO globalContext.VO]
}


好记性不如烂笔头,看到自己觉得应该记录的知识点,结合自己的理解进行记录,用于以后回顾。
原文地址:https://www.cnblogs.com/wangxi01/p/8393859.html