function celebrityIDCreator(theCelebrities) {
var i;
var uniqueID = 100;
for (i = 0; i < theCelebrities.length; i++) {
theCelebrities[i]["id"] = function () {
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
在前面的示例中,在调用匿名函数时,i的值为3(数组的长度然后递增)。数字3被添加到uniqueID以为所有名人ID创建103。因此返回数组中的每个位置都得到id = 103,而不是预期的100,101,102。
我阅读了回调函数文章,当我无法理解这句话时,我的意思是如何解释我们总是得到id = 103?
我在网上搜索但找不到一个好的答案。希望在这里我能克服它。感谢。
答案 0 :(得分:1)
原因是您正在使用回调函数。一旦调用就应该执行回调。因此,一旦你实际调用它就会执行它。
在您的情况下,每次迭代的回调返回始终是$scope.tag = result[0].name;
+ i
的最后一个值。
答案 1 :(得分:1)