[英]JavaScript: unsure how call and apply relate to the arguments object in this function
用抽象的方式,我完全理解發生了什么。 這是為傳遞到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 prototype
的pop
方法
我不清楚的是...
TUT表示,這將為我們提供Function
對象並將其分配給fn
變量,由於pop
方法,它還將從arguments
對象中刪除該Function
對象。 ( 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);
參數不是數組,因此它沒有pop方法,我們從數組原型中獲取pop方法並在arguments上運行它-這意味着我們將arguments用作.pop()
的“ this” .pop()
。 這將返回參數的最后一個參數,該參數應該是函數(在這種情況下為sum)。
彈出后- arguments = [10, 15];
現在,我們接受參數並使用.apply(thisArg, [argsArray])
方法的第二部分-argsArray。
在fn.apply(null, arguments)
thisArg = null(無關緊要,因為函數sum不使用此值),現在apply以“數組”順序將參數分配給參數-x(1st)= 10 ,y(2nd)= 15,並運行該函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.