这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题。
在javascript中是没有函数重载机制的,对于用惯了java开发的同学可能就表示吃惊了,我屮艸芔茻,函数
没有重载?那怎么搞?!!
从我今天遇到的问题说起吧,还是那个list页面,看过之前刚写的博客的可能知道,我在list页面写了search(order)
函数来执行查询跳转,但是这个页面很特殊,因为导航栏上面也是有一个搜索功能框的,我将那个功能框的搜索
函数设定为search(),接下来好玩的事情发生了:
我从主页面的导航搜索(两个查询参数from和to)进入到结果页(list页面),然后再次点击list页面上面的导航搜索
这时候,跳转的路径多了好多查询参数,这绝壁是执行了list页面的搜索啊,没有执行导航搜索函数search(),并且
地址栏上面 order=undefined,这就更加确定是执行了搜索页的搜索函数(因为只有这个函数才会在路径中拼order参
数),然后一看函数名:一个叫search(order),一个叫search();好像明白了点什么。
下班回家,写了个页面测试(刚刚写的):
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <div onclick="say('tt');" style="width:200px;height:200px;border:1px solid;">用户可以看到的</div> <script> function say(word){ alert(word); }; function say(){ alert("hello world"); }; </script> </body> </html>
点击,弹出“hello world”,函数申明换个顺序亦或是调用函数的时候去除函参,都只会执行最后一个函数名为
search()的函数,而不会管到底有没有形参,至此可以说明,javascript是没有函数重载的机制的。
那么这里为什么要说一下js函数的伪重载呢?这就涉及到 arguments 这个参数了。具体明天说。