console.log(
Array.from({ length: 3 }, Function.call, Number)
);
根据我的理解,上面的代码(value, index)
传递给Function
原型的.call
方法。
并且.call
的this
值设置为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
。
但是value
是undefined
的,因为数组还没有初始化。
那么代码如何生成一个数组,其中每个值都等于其索引,而不是充满NaN
?
.call
接受的第一个参数是要调用的函数的this
值。其余参数是调用函数的普通参数。所以,这个:
Number.call(value, index)
相当于:
Number(index)
其中Number
内的this
值设置为value
。
value
确实是未定义的,但 Number 构造函数并不关心它的调用上下文、this
,所以它实际上被忽略并从索引创建一个数字。
这是另一种看待它的方式:下面是一个名为foo
的函数,当.call
ed 时,它不关心第一个参数,只考虑第二个参数:
function foo(arg) {
return 'foo' + arg;
}
console.log(
foo.call('IGNORED PARAMETER', 'bar')
);