返回匿名函数数组的索引位置
Return index position from array of anonymous functions
我想弄清楚为什么这些匿名函数返回我的循环迭代器的最后一个值,而不是迭代器的当前值,当它被设置。我认为值是免除引用传递的,但看起来这些返回值是指向原始I的指针?
function myFunctions(n) {
var list = [];
for (var i = 0; i < n; i++) {
list.push(function(){
return i;
});
}
return list;
}
var res = [];
myFunctions(4).map(function(el){
res.push(el());
});
var p = document.createElement('p');
p.innerHTML = res.join(',');
document.body.appendChild(p);
//expected result: 0,1,2,3
阅读材料:Javascript通过引用与通过值
小提琴:http://jsfiddle.net/ZP2hM/
这是人们在使用闭包时经常犯的错误。下面是一个修复:
for (var i = 0; i < n; i++) {
var tmp = i;
list.push(function(){
return tmp;
});
}
这是因为列表数组中的所有函数都绑定到当前的i值。当循环结束时,i = n-1;这就是为什么所有数组元素都是n-1。这可以通过临时变量来解决,该临时变量对于每个列表元素都是唯一的。
相关文章:
- 在从索引位置返回的字符串中查找空白
- 需要呈现MongoDB查询返回结果的特定索引/位置
- 有没有办法得到引导3旋转木马的索引位置
- 点击JQuery/HTML5显示元素的索引/位置
- Javascript i(index,iterator):如果用作变量,它将始终被解释为索引位置
- 获取所选元素的位置,而不是 DOM 中元素的索引
- Javascript 返回数组中“匹配”数组的位置索引
- 动态 jquery ui 可排序块的索引/位置
- Windows 8 应用程序中的索引数据库位置
- 如何删除字符串中的索引位置范围
- 工具提示 z 索引位置或其他内容
- jquery附加到索引位置
- 特殊字符的javascript验证's索引/位置
- Phonegap:在目录中导航,索引位置不正确
- 如何在AngularJS中保存对象的JSON索引位置,而不是对象本身
- 将数组元素按索引位置相乘
- 返回匿名函数数组的索引位置
- 哪个值是javascript数组.indexOf作为索引位置
- 如何通过文本搜索返回JSON数组中项目的索引位置?
- 按索引位置解析json对象数组