gpt4 book ai didi

JavaScript:不确定 call 和 apply 与此函数中的参数对象有何关系

转载 作者:行者123 更新时间:2023-12-03 09:10:15 25 4
gpt4 key购买 nike

以抽象的方式,我完全理解发生了什么。这是一种为传递到 calculate 对象的函数提供无限数量的参数的好方法。

var calculate = function(){

var fn = Array.prototype.pop.apply(arguments);
return fn.apply(null, arguments);

},

sum = function(x,y){

return x + y;

},

diff = function(x,y){

return x - y;

};

这似乎是该函数的关键。我们在这里使用 apply 方法来允许 arguments 对象拥有 Array Prototypepop 方法

我不清楚的是......

TUT 表示这将为我们提供 Function 对象并将其分配给 fn 变量,它还会删除该 Function由于使用了 pop 方法,因此将 code> 对象从 arguments 对象中分离出来。 (pop 方法删除数组的最后一项,并将其分配给曾经调用的 pop 方法)在本例中为 fn 变量。我们最终得到一个 arguments 对象,它不再具有函数对象,它只具有所有数值

var fn = Array.prototype.pop.apply(arguments);
return fn.apply(null, arguments);

最近,我开始意识到我的误解可能是我看到的是 fn 变量,而不是最终传递到 calculate 对象的函数.

预先感谢您帮助我理解这一点!

最佳答案

这是 apply 的语法:

function.apply(thisArg, [argsArray])

让我们使用总和计算:

calculate(10, 15, sum);

内部计算:

开始时 - arguments = [10, 15, sum];请注意,参数不是数组,而是类似数组的对象 - 使用数组表示法更容易

var fn = Array.prototype.pop.apply(arguments); 

Arguments 不是数组,因此它没有 pop 方法,我们从数组原型(prototype)中获取 pop 方法并在参数上运行它 - 这意味着我们使用参数作为 .pop() 的 'this' 属性。这将返回参数的最后一个参数,该参数应该是函数(在本例中为 sum)。

弹出后 - arguments = [10, 15];

现在我们接受参数并使用 .apply(thisArg, [argsArray]) 的第二部分方法 - argsArray。

fn.apply(null, arguments) thisArg = null(没关系,因为函数 sum 不使用 this),现在 apply 将参数按“数组”顺序分配给参数 - x(第一个)= 10,y(第二个)= 15,并且运行该函数。

关于JavaScript:不确定 call 和 apply 与此函数中的参数对象有何关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32096100/

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