簡體   English   中英

在JavaScript中,綁定參數是否必須在匿名函數參數中?

[英]In JavaScript, must bound parameters be in the anonymous function parameters?

考慮下面的代碼,它可以正常工作。 這是一些調試的結果。 它似乎起作用是因為我不僅在bind中包含了selectedRowNum,而且似乎還需要將selectedRowNum作為由.end運行的匿名回調的參數包括在內

這有意義嗎? 如果綁定變量,是否還必須將其作為要綁定到的函數的參數包含在其中?

for (var i = selectedRows.length; i--;) {
    var selectedRowNum = selectedRows[i];
    console.log('outer selectedRowNum');
    console.log(selectedRowNum);
    var url = urlbase + '/' + this.state.data[selectedRowNum].id;
    request
          .del(url)
          .end(function(selectedRowNum, err, res) {
            var data = this.state.data.slice();
            data.splice(selectedRowNum, 1);
            this.setState({data: data});
            this.forceUpdate();
            }.bind(this, selectedRowNum));
    };

是的,您需要。

傳遞給bind()的args值將放在調用的函數參數列表的前面,因此您需要在目標函數中將其作為參數接收。

一個簡單的例子是

 function x(p1, p2, p3) { console.log(p1, p2, p3) } var fn = x.bind(window, 1); fn(2, 3); fn('a', 'b'); 

在這里,我們將附加的參數1傳遞給綁定,並且在調用綁定的函數時,我們傳遞的是參數2和3,現在,當我們在方法中接收到它時,我們需要在那里有3個參數。

您還期望如何引用嘗試傳遞的綁定值?

function(selectedRowNum, err, res) {在這里, selectedRowNum只是對傳入的第一個參數的引用。

好吧,從技術上講,答案是“不需要”。 您無法將其列為參數,而將其稱為arguments[0]

並非絕對需要在匿名函數聲明中包含參數,因為您可以像arguments[0]arguments[1]那樣通過arguments對象訪問參數。

但是最好將它們聲明為命名參數,因為它使您的代碼更易於讀寫。 如果您沒有在匿名聲明中將它們聲明為命名參數,那么將沒有引用它們的符號名,您將被迫使用arguments對象來訪問它們。

這是Javascript的重要方面。 在函數聲明中聲明命名函數參數(無論是否匿名)僅為您提供名稱,您可以通過該名稱引用該特定參數。 由於具有符號名是創建可讀代碼的重要組成部分,因此通常認為遵循這種做法是一種好習慣。

當您將.bind()與第一個參數一起使用時,還需要在實際函數調用之前添加更多參數。 稍后將在參數列表中移動所有其他參數。 為了訪問正確的參數,匿名函數聲明必須使用參數列表中正確位置的變量。 如果您不包括通過.bind()添加的額外變量,則您的其他參數將不合適,並且將具有錯誤的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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