以抽象的方式,我完全理解发生了什么。这是为传递给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
对象的函数。
先谢谢你帮助我理解这个!!
答案 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,并运行函数。