簡體   English   中英

JavaScript:不確定調用和應用與該函數中的arguments對象的關系

[英]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 prototypepop方法

我不清楚的是...

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM