为了账号安全,请及时绑定邮箱和手机立即绑定

sortNum(a,b)这个函数使用的时候不应该传参吗?

<script type="text/javascript">
  function sortNum(a,b) {
  return a - b;
 //升序,如降序,把“a - b”该成“b - a”
}
 var myarr = new Array("80","16","50","6","100","1");
  document.write(myarr + "<br>");
  document.write(myarr.sort(sortNum));
</script>

不懂这个函数的意思,前面有人解释a,b可以理解为数组下标,可是下标怎么能体现数组的值呢

正在回答

5 回答

sortNum()被传进去的时候其实是以“函数指针”的方式传进去的,因为在JS里面,函数也被当作对象处理,所以也是可以被当作参数传递的。也就是你传递了一个函数对象给array.sort()。

我觉得你想问的是既然没有传递那些元素进去,到底是怎么排序的。其实我们自定义的sortNum()被传入array.sort()之后,由array.sort()将数组里的元素两两传入sortNum()来进行大小比较,也就是说不需要我们手动传入数组元素。

0 回复 有任何疑惑可以回复我~
#1

小菜鸟工程师

请问为什么不是.sort(sortNum())而是.sort(sortNum)呢???调用函数sortNum为什么不加括号,而是像调用对象一样的?
2019-07-03 回复 有任何疑惑可以回复我~
#2

沈夜 回复 小菜鸟工程师

“sortNum()被传进去的时候其实是以“函数指针”的方式传进去的”,调用函数是需要加括号的,但是这里并不是调用函数,而是将函数传进去。你并没有调用sortNum()这个函数,你只是将它传递给别人调用。如果你要真正理解这个语法是怎么回事,你要搜索一下“函数指针”的知识
2019-07-18 回复 有任何疑惑可以回复我~

不要乱理解! myarr.sort(sortNum) 相当于 myarr.sort(function sortNum(a,b) { return a -b;})。

至于为什么这样写,建议查看文档  es6关于该方法的解释

3 回复 有任何疑惑可以回复我~

我的理解就是固定格式

0 回复 有任何疑惑可以回复我~

我的理解,指的不是下标,而是ASCII码,a为97,b为98,a-b是指按ASCII码进行升序排列

1 回复 有任何疑惑可以回复我~

a,b传递的应该不是下标而是数组内的元素,sort()排序是对数组内的元素进行排序,所以取出来比较的不是下标而是元素。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

sortNum(a,b)这个函数使用的时候不应该传参吗?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信