簡體   English   中英

JavaScript命名排序函數

[英]JavaScript named sort function

我想知道是否可以將命名函數傳遞給Array.sort()。 我試圖做類似下面的邏輯,但顯然它抱怨a沒有被定義的。

if (iWantToSortAscending) {
    myArray.sort(sortAscending(a, b));
} else {
    myArray.sort(sortDescending(a, b));
}

// my lovely sort functions
function sortAscending(a, b) {
    ...
    sorty worty
    ...
}

function sortDescending(a, b) {
    ...
    sorty worty differently
    ...
}

顯然,我可以讓代碼像下面一樣工作,但確實如此,但我不想為了可讀性和調試而使用匿名函數。

if (iWantToSortAscending) {
    myArray.sort(function (a, b) {
        ...
        sorty worty
        ....
    }
} else {
    ...

肯定是,但你必須引用該函數,而不是調用它,並且參數是自動傳遞的

myArray.sort(sortAscending);

無論何時向函數添加括號和參數,都會立即調用它。
當你希望它被另一個函數調用時,例如作為sort()的回調,你引用它,並保留括號。

想想“我的節目在做什么?”

myArray.sort(sortAscending(a, b));

它有什么作用? 它嘗試使用表達式sortAscending(a,b)結果調用myArray.sort 首先, ab未定義,因此拋出( ReferenceError )。 但是如果ab被定義怎么辦? 表達式sortAscending(a,b)結果不是函數。

為了使事情有效,你必須使用代碼myArray.sort(sortAscending); - 它傳遞函數作為參數。

暫無
暫無

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

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