这个数组初始化速记是如何工作的?



console.log(
Array.from({ length: 3 }, Function.call, Number)
);

根据我的理解,上面的代码(value, index)传递给Function原型的.call方法。

并且.callthis值设置为Number.

所以它与:

Array.from({ length: 3 }, (value, index) => Number.call(value, index))

在VSCode中,我的工具提示将函数描述为:

mapfn: (v: any, k: number) => any

这就是我得到(value, index)的地方,假设k意味着key/index.

Number只接受一个数字参数。 所以它会接受value,而忽略index

但是valueundefined的,因为数组还没有初始化。

那么代码如何生成一个数组,其中每个值都等于其索引,而不是充满NaN

.call接受的第一个参数是要调用的函数的this值。其余参数是调用函数的普通参数。所以,这个:

Number.call(value, index)

相当于:

Number(index)

其中Number内的this值设置为value

value确实是未定义的,但 Number 构造函数并不关心它的调用上下文、this,所以它实际上被忽略并从索引创建一个数字。

这是另一种看待它的方式:下面是一个名为foo的函数,当.called 时,它不关心第一个参数,只考虑第二个参数:

function foo(arg) {
return 'foo' + arg;
}
console.log(
foo.call('IGNORED PARAMETER', 'bar')
);

最新更新