2012-01-21 80 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