gpt4 book ai didi

javascript - 关于 Javascript 中 .call() 方法的问题

转载 作者:行者123 更新时间:2023-12-02 22:21:20 27 4
gpt4 key购买 nike

我需要帮助理解那些没有明确指出它与代码其他部分的关系的代码(详细说明发生这种情况的位置和原因的资源将非常有益)。很抱歉,我不知道如何更好地引用此类代码,或者即使它有一个特定的名称。

作为示例,我包含了以下代码。 .call(arguments) 没有显式引用任何函数。然而,它会导致 sumArgumentsCorrectly 使用作为参数传入的数字列表 (1,2,3,4,5) 来执行(在原始的 sumArgumentsCorrectly 执行)。这对于新人来说非常令人困惑,不幸的是,我在 .call() 方法上找到的所有资源都引用了 .this() 的重定向,并且没有详细说明它如何在没有显式命名的情况下调用自己的函数。

function sumArgumentsCorrectly(){
return [].slice.call(arguments).reduce(function(acc,next){
return acc + next;
},0)
}

console.log(sumArgumentsCorrectly(1,2,3,4,5)) // 15

最佳答案

function sumArgumentsCorrectlyV2(){
return Array.prototype.slice.call(arguments).reduce(function(acc,next){
return acc + next;
},0)
}

function sumArgumentsCorrectlyV3(){
return Array.from(arguments).reduce(function(acc,next){
return acc + next;
},0)
}

console.log(sumArgumentsCorrectlyV2(1,2,3,4,5)) // 15

console.log(sumArgumentsCorrectlyV3(1,2,3,4,5)) // 15

我添加了该代码的两个不同版本。正如 @Amy 所评论的,参数不是数组,而是类似数组的对象。它具有索引可访问属性和长度属性,并且没有诸如 slicereduce 之类的函数。为了执行数组函数,您需要访问该函数并传递类似数组的实例。当您调用 call 方法并将arguments 作为参数传递时,您是在告诉编译器在此实例上执行此函数。

关于javascript - 关于 Javascript 中 .call() 方法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59220906/

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