意外调用Javascript中的函数

时间:2010-01-24 17:42:31

标签: javascript javascript-events

我不是很擅长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 个答案:

答案 0 :(得分:8)

Javascript不支持方法重载; 它只是覆盖函数,因此每次都会调用最后一个函数。

解决这个问题的方法就是制作1个函数并在其中放入一些条件来检查变量是否已设置。

答案 1 :(得分:2)

你宣布两次功能测试。第二个覆盖了第一个定义。

答案 2 :(得分:1)

在JavaScript中不允许重载函数。所以在这种情况下,第二个函数会覆盖第一个函数,因此你总能看到这个结果。

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

function test(one,two)
{
if(two)
alert('expected: second function with two parameters');
else
alert('surprise! first function with one parameter');
}

答案 3 :(得分:0)

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

如果之前使用过这个,以便在类似于下面的javascript中实现getter / setter类型功能:

var _pageSize;

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

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

if (pageSize() < 15) {
    pageSize(15)
}

答案 4 :(得分:0)

啊,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)) 

答案 5 :(得分:0)

调用此类函数时:

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";
   }
   ...
}