代码之家  ›  专栏  ›  技术社区  ›  Reigel Gallarde

对javascript中函数的意外调用

  •  -1
  • Reigel Gallarde  · 技术社区  · 14 年前

    我对javascript不是很在行,所以我来问一下。

    下面是一个示例代码。

    <html>
    <head>
    <script>
    function test(one)
    {
    alert('surprise! first function with one parameter');
    }
    
    function test(one,two)
    {
    alert('expected: second function with two parameters');
    }
    </script>
    </head>
    <body onload="javascript:test('first')">
    </body>
    </html>
    

    问题:

    我以为 'surprise! first function with one parameter' 然后会被通知onload,因为我只使用一个参数调用函数。令我惊讶的是,它在第二个函数中发出了警报。

    • 有人能给我解释一下为什么吗?
    • 我怎样才能绕过它呢?
    6 回复  |  直到 9 年前
        1
  •  8
  •   fijter    14 年前

    javascript不支持方法重载; 它只是覆盖函数,以便每次调用最后一个函数。

    绕过它的一个方法就是生成1个函数,并在其中放置一些条件来检查变量是否设置好。

        2
  •  2
  •   Mic    14 年前

    您声明了两次函数测试。第二个覆盖了第一个定义。

        3
  •  1
  •   Fitzchak Yitzchaki    14 年前

    在javascript中,不允许重载函数。因此,在这种情况下,第二个函数将覆盖第一个函数,因此您总是看到这个结果。

    解决此问题的方法是检查参数的值:

    功能测试(一、二)
    {BR/> 如果(两)
    alert('应为:带两个参数的第二个函数');
    否则< BR> 警惕(惊喜!带一个参数的第一个函数');
    }< /代码>

    是检查参数值:

    功能测试(一、二)
    {
    如果(二)
    alert('应为:第二个函数,有两个参数');
    其他的
    警惕(惊喜!第一个函数有一个参数');
    }

        4
  •  0
  •   Brian Hasden    14 年前

    在javascript中,函数的参数不是必需的。在使用之前,您需要检查参数是否未定义。

    如果之前使用此函数来实现类似于下面的javascript中的getter/setter类型功能:

    var _pageSize;
    
    function pageSize(value) {
        if (value) {
           _pageSize = value;
        }
        else {
           return _pageSize;
        }
    }
    

    然后,可以使用pageSize方法获取和设置页面大小,如下所示:

    if (pageSize() < 15) {
        pageSize(15)
    }
    
        5
  •  0
  •   Bill Bingham    14 年前

    啊,javascript并不像那样做多态性。它确实有一个参数集合,您可以在其中查找,然后在给定输入的情况下执行正确的操作。

    类似的东西:

    function calcAverage() 
    { 
       var sum = 0 
       for(var i=0; i<arguments.length; i++) 
          sum = sum + arguments[i] 
       var average = sum/arguments.length 
       return average 
    } 
    document.write("Average = " + calcAverage(400, 600, 83)) 
    
        6
  •  0
  •   Shadow Wizard    14 年前

    调用此函数时:

    function test(one,two)
    

    只有一个参数,参数“two”将具有特殊类型:undefined。 任何访问变量2的尝试都将失败,并出现“two is undefined”错误,为避免此类错误,请使用typeof命令:

    function test(one,two)
    {
       if (typeof two == "undefined") {
          //give default value
          two = "default value here";
       }
       ...
    }