2012-01-21 49 views
2

n.sort(sortNo)的調用未指定函數sortNo(其定義的參數爲ab)的任何參數。誰能解釋爲什麼?升序排序 - sort()

<script type="text/javascript"> 
function sortNo(a,b) 
{ 
    return a - b; 
} 
var n = ["10", "5", "40", "25", "100", "1"]; 
document.write(n.sort(sortNo)); 
</script> 

return a - b;使用的公式嗎?

我知道sortNo設有兩個項目。數字操作是否返回以下內容?

  • 負值,如果ab
  • 正值之前,如果b是前a
  • 零:如果ab相等

回答

1

a和b都是字符串。所以a-b沒有意義。

使用

 function sortNumber(a,b) 
    { 
     if (a < b) 
      return 1; 
     else if(a>b) 
      return -1; 
     return 0; 
    } 
+0

好的..謝謝..但是,爲什麼在n.sort中sortNo(sortNo)沒有指定a和b的任何參數? – user460920

+0

函數n.sort用戶函數sortNo來確定順序。你只是傳遞一個函數的引用。函數sort會調用你的函數sortNo,只要它想比較數組中的兩個對象,並根據返回值來決定如何排序。 – Shadow

+0

好的,只要你傳遞函數的參考..i.e。功能內的功能,那麼就沒有必要傳遞參數..我是嗎? – user460920

4

這是因爲Array.sort方法期望一個函數指針作爲參數。然後它將遍歷數組並調用此函數。您也可以使用匿名功能:

n.sort(function(a, b) { 
    return a- b; 
}); 
+0

Thanks..Can你描述了一些關於函數指針。只是爲了上面的代碼,我不知道很多關於指針..可以解釋,以便我清楚上述代碼。 – user460920

+0

@ user460920,Array.sort是一個期望另一個函數作爲參數的函數。所以你傳遞函數的名字作爲參數。這是指向這個函數的指針。如果你編寫了例如'Array.sort(sortNumber(5,6))',那麼你不再傳遞一個函數作爲參數,但是你將這個函數的執行結果作爲參數傳遞,而不是Array.sort方法期望。 –

+0

我們thanks..so可以說,以上函數是一個遞歸函數 – user460920