JS将函数推送到文字

时间:2018-12-08 07:15:39

标签: javascript

在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的行上表示/存储数字?

1 个答案:

答案 0 :(得分:1)

线路注释1:

在这里,您要将function推入数组。在这里,您使用的是箭头功能,因此将其转换为匿名功能实际上就是在推动:

function() {
  return i
}

进入阵列。

此函数将返回变量ii的值是通过您的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);