//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]
}