(在搜索时没有找到此Q,但可能是不知道要搜索的术语的问题)
尝试使用在SO上找到的代码来模仿range()(学习语言,因此避免在underscore.js中使用现成的函数),并且我无法理解为什么这会起作用:
var range = Array.apply(null,Array(3));
range = range.map(function (x, i) {return i;});
但这不是:
var range = Array.apply(null,Array(3));
range = range.map(function (x, i) {
console.log(range[i-1]);
return i;
});
< undefined
< undefined
< undefined
表面上唯一不同的是console.log
行,但为什么要重要?
提前致谢!
答案 0 :(得分:0)
第一行是创建一个大小为3的数组,但这些值都是未定义的。当您使用map
进行迭代(以创建新的range
)时,您将通过索引进行日志记录;第一个循环中的range[x - i]
正在查看range[undefined - 0]
(变为range[0]
),后续循环会查看range[-1]
等。当然,他们会{{1} }。在undefined
完成之前,map
尚未重新分配,因此您所获得的只有range
当undefined.
完成时,无论有无map
1}},log
将为range
。