gpt4 book ai didi

javascript - 什么是 Array.map(Function.call,Number)

转载 作者:可可西里 更新时间:2023-11-01 02:33:04 25 4
gpt4 key购买 nike

var array1 = [1, 4, 9, 16];

map1=array1.map(Function.call,Number);

为什么map1的输出是[0,1,2,3],这个map函数是干什么的?

最佳答案

Array.prototype.map调用为数组的每个成员提供的函数,并返回一个由它们的返回值组成的新数组。

在这种情况下,提供的函数是 Function.call .

Array.prototype.map 的第二个参数指定所提供的函数应该运行的上下文。

在这种情况下,上下文是 Number .

Array.prototype.map 的简单实现可能类似于:

function map(callback, thisArg) {
const ret = []
for (let index = 0; index < this.length; index++) {
const value = this[index]
ret.push(callback.call(thisArg, value, index, this))
}
return ret
}

现在,这个特殊情况使用了很多间接寻址,所以不容易理解为什么传递 Function.callNumber 应该返回 [0, 1, 2, 3],让我们看一下那部分。

回调(Function.call)在thisArg(Number)的上下文中调用时该代码将执行以下内容:

(Function.call).call((Number), (1), (0), ([1, 4, 9, 16]))
// ^-- callback ^-- value ^-- array
// ^-- thisArg ^-- index

评估 Function.call.call(...) 有点费脑筋,但它相当于在第一个参数,应该是一个函数。在我们的例子中,它是。这是 Number 函数。

然后我们可以将此语句简化为:

Number.call(1, 0, [1, 4, 9, 16])

Number 函数将第一个参数转换为数字。其他参数与函数上下文一起被忽略。这意味着整个表达式可以简化为:

Number(0)

0索引

这就是返回值为 [0, 1, 2, 3] 的原因,因为这些是原始数组的索引。


不用说,原始代码示例不应该在日常编程中使用。整个系统使用起来会更简单:

[1, 4, 9, 16].map((value, index) => index)

即便如此,也应该注意原始值被无用地丢弃了。此类代码示例仅在探索特定语言行为的学术意义上有用,或者当您想在编码挑战中故意混淆您的 friend 时。

关于javascript - 什么是 Array.map(Function.call,Number),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50478967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com