js函数的伪重载

这也是今天写东西是遇到的一个问题,导致我联想起了函数重载的问题。

在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 这个参数了。具体明天说。

猜你喜欢

转载自www.cnblogs.com/eco-just/p/9545660.html