Javascript匿名函数

时间:2015-10-17 03:11:05

标签: javascript anonymous-function

(在搜索时没有找到此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行,但为什么要重要?

提前致谢!

1 个答案:

答案 0 :(得分:0)

第一行是创建一个大小为3的数组,但这些值都是未定义的。当您使用map进行迭代(以创建新的range)时,您将通过索引进行日志记录;第一个循环中的range[x - i]正在查看range[undefined - 0](变为range[0]),后续循环会查看range[-1]等。当然,他们会{{1} }。在undefined完成之前,map尚未重新分配,因此您所获得的只有rangeundefined.完成时,无论有无map 1}},log将为range