这里你可以看到循环内部有一个匿名函数,它只在结束时执行一次。如果我使用函数声明它会调用3次(这是数组的长度)。
function celebrityIDCreator(theCelebrities) {
var i;
var uniqueID = 100;
for (i = 0; i < theCelebrities.length; i++) {
console.log(i) //which return 1,2,3
theCelebrities[i]["id"] = function () {
console.log(i) //which returns 3
return uniqueID + i;
}
}
return theCelebrities;
}
var actionCelebs = [{
name: "Stallone",
id: 0
}, {
name: "Cruise",
id: 0
}, {
name: "Willis",
id: 0
}];
var createIdForActionCelebs = celebrityIDCreator(actionCelebs);
var stalloneID = createIdForActionCelebs [0];
console.log(stalloneID.id()); // 103