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]
.
(搜索时没有找到这个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]
.