在Axel Rauschmayer的书Exploring ES6中,我偶然发现了以下代码片段:
const arr = [];
for (let i=0; i < 3; i++) {
arr.push(() => i); //1
}
console.log(
arr.map(x => x()) //2
)
能否请您解释一下如何在注释为/ 1和/ 2的行上表示/存储数字?
答案 0 :(得分:1)
线路注释1:
在这里,您要将function
推入数组。在这里,您使用的是箭头功能,因此将其转换为匿名功能实际上就是在推动:
function() {
return i
}
进入阵列。
此函数将返回变量i
。 i
的值是通过您的for循环确定的。因此,在运行for循环之后,您将获得一系列看起来(有些但不完全)的函数:
[function() {retrun 0}, function() {return 1}, function() {return 2}];
线路注释2:
在此数组上运行map
方法会将每个函数调用转换为其返回值。它通过执行x()
来调用每个元素/函数来实现。由于x
代表函数数组中的给定函数,因此执行x()
将为您提供一个数字。
因此,将其映射版本存储到变量中,我们将获得每个函数返回的结果:
[0, 1, 2]
const arr = [];
for (let i=0; i < 3; i++) {
arr.push(() => i); //1
}
let res = arr.map(x => x()); //2
console.log(res);