JavaScript:不确定call和apply如何与此函数中的arguments对象相关

时间:2015-08-19 12:54:12

标签: javascript arrays

以抽象的方式,我完全理解发生了什么。这是为传递给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方法允许pop对象拥有Array prototype

Function方法

我不清楚的地方是......

TUT说这将为我们提供fn对象并将其分配给Function变量,它还会从arguments中删除pop个对象} object,因为pop方法。 (fn方法删除数组的最后一项,并将其分配给所谓的pop方法。在这种情况下,arguments变量。我们最终得到一个var fn = Array.prototype.pop.apply(arguments); return fn.apply(null, arguments); 对象,它不再具有函数对象,它只具有所有数值

fn

最近,我开始意识到也许我的误解是我看到calculate变量就是这样,而不是最终会传递到:-ms-input-placeholder对象的函数。

先谢谢你帮助我理解这个!!

1 个答案:

答案 0 :(得分:1)

这是apply的语法:

function.apply(thisArg, [argsArray])

让我们使用sum计算:

calculate(10, 15, sum);

内部计算:

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

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

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

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

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

fn.apply(null, arguments) thisArg = null(由于函数sum并不使用此函数并不重要),现在apply将参数赋给'数组中的参数&#39 ; order - x(1st)= 10,y(2nd)= 15,并运行函数。