// 闭包实现
// 闭包是指有权访问另一函数作用域变量的函数
// 闭包常见方法就是在函数内部定义另一个函数实现
var name = "Lucy";
function outerObj() {
var name = "Niko";
return function() {
return name;
}
}
console.log(outerObj()());
// outerObj返回一个匿名函数,返回的匿名函数的作用域链包含着outerObj的活动对象(参数对象)
// 所以可以通过调用返回的匿名函数,从而获取到outerObj作用域链中的属性
var arrays = new Array;
function createFunction() {
for(var i = 0;i< 10;i++) {
arrays[i] = function() {
return i;
}
}
}
createFunction();
arrays.forEach(function(item,index,arrays){
console.log(item());
})
// arrays中的每个函数作用链中都含有creatFunction函数的活动对象
// 所以他们指向的是同一个变量i
// 调用时,内部i已经到10了,故所有函数返回10
// 我们可以通过立即执行函数将参数提前传给匿名函数
var arrays = new Array;
function createFunction() {
for(var i = 0;i< 10;i++) {
arrays[i] = function(num) {
return function() {
return num;
};
}(i);
}
}
createFunction();
arrays.forEach(function(item,index,arrays){
console.log(item());
})