JavaScript:不确定如何调用和应用与这个函数中的参数对象相关

JavaScript: unsure how call and apply relate to the arguments object in this function

本文关键字:函数 参数 对象 应用 何调用 不确定 调用 JavaScript      更新时间:2023-09-26

抽象地说,我完全明白发生了什么。这是为传递给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变量,它还将从arguments对象中删除Function对象,因为pop方法。(pop方法删除数组的最后一项,并将其分配给曾经调用过pop方法的对象)在本例中是fn变量。我们最终得到一个arguments对象,它不再有一个函数对象,它只有所有的数值

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

最近,我开始意识到也许我的误解是我看到fn变量只是,而不是最终将传递到calculate对象的函数。

提前感谢你帮助我理解这一点!!

这是apply:

的语法
function.apply(thisArg, [argsArray])

用calculate on sum:

calculate(10, 15, sum);

内部计算:

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

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

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

After pop - arguments = [10, 15];

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

fn.apply(null, arguments) thisArg = null(没有关系,因为函数sum不使用这个),现在apply将参数分配给'数组'顺序的参数- x(第1)= 10,y(第2)= 15,并运行函数