闭包指有权访问上级作用域变量的函数 ,即函数中的函数
function createFunctions(){
var result = new Array();
for(var i=0; i<10; i++){
result[i] = function(){
return i;
};
}
console.log(result);//每一项元素为匿名函数
return result;
}
var arr = createFunctions();
console.log(arr[1]());//10
function create(){
var result = new Array();
for(var i=0; i<10; i++){
result[i] = (function(){
return i;
})();
}
return result;
}
var ar = create();
console.log(ar);//[0,1,2,3,4,5,6,7,8,9]
前一个函数result数组里存入的每一项都是闭包函数,执行完for循环以后,i更新为10,所以数组里存入的每一项闭包中根据作用域链i更新为10;
后一个函数,result存入匿名函数立即执行的值,所以每遍历到的当前的i立即存入数组。
同时闭包模仿块级作用域(形成私有作用域)
执行结果: