Javascript 匿名函数中的多个语句

Multiple statements in 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 行,但这有什么关系呢?

提前致谢!

第一行是创建一个大小为 3 的数组,但所有值都是未定义的。当您使用 map 对其进行迭代(以创建一个新的 range)时,您正在通过索引进行记录; range[x - i] 在第一个循环中查看 range[undefined - 0](变为 range[0]),随后的循环查看 range[-1],等等。当然它们是 undefined。在 map 完成之前,range 没有被重新分配,所以你将得到的只是 undefined.map 完成时,有或没有 log, range 将是 [0, 1, 2].