1、保持局部变量不被回收
function fn() {
var n = 999;
nAdd = function() {
n+=1
}
return function() {
return n
}
}
var result = fn();
console.log(result()) // 999
nAdd();
console.log(result()) // 1000
2、解释一下这个被用烂的例子
var arr = new Array()
for(var i = 0; i < 10; i++){
arr[i] = function getI(){
return i
}
}
console.log(i) // 10
console.log(arr[5]()) // 10
// 这时arr[5] 等价于 ,即传入的是一个函数对象,并不是i
function getI(){
return i
}
当换成立即执行函数之后
var arr = new Array()
for(var i = 0; i < 10; i++){
arr[i] = function getI(){
return i
}()
}
for(var j = 0; j < 10; j++){
console.log(arr[j]) // 0-9
}