Javascript中对函数的意外调用
我不太擅长javascript,所以我在这里问 下面是一个示例代码Javascript中对函数的意外调用,javascript,javascript-events,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>
<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>
功能测试(一)
{
警报(“惊喜!第一个带一个参数的函数”);
}
功能测试(一、二)
{
警报('预期:第二个函数有两个参数');
}
问题:
我原以为那是个惊喜!第一个带有一个参数“的函数将在加载时发出警报,因为我只使用一个参数调用该函数。令我惊讶的是,它在第二个函数中发出了警报
- 谁能给我解释一下为什么
- 我怎样才能绕过它呢
- Javascript不支持方法重载;
它只是覆盖函数,因此每次都会调用最后一个函数
解决这个问题的一种方法就是创建一个函数,并在其中添加一些条件来检查变量是否已设置。在javascript中,函数的参数不是必需的。在使用该参数之前,您需要检查该参数是否未定义 如果之前使用此选项是为了在javascript中实现getter/setter类型功能,如下所示:
var _pageSize;
function pageSize(value) {
if (value) {
_pageSize = value;
}
else {
return _pageSize;
}
}
然后,您可以使用pageSize方法获取和设置页面大小,如下所示:
if (pageSize() < 15) {
pageSize(15)
}
if(pageSize()<15){
页面大小(15)
}
啊,Javascript不会这样做。它确实有一个arguments集合,您可以查看该集合,然后在给定输入的情况下执行正确的操作
比如:
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))
函数calcAverage()
{
var总和=0
对于(var i=0;i您声明了两次函数测试。第二个函数覆盖了第一个定义。在JavaScript中,重载函数是不允许的。因此在这种情况下,第二个函数覆盖了第一个函数,因此您总是可以看到这个结果
解决方法是检查参数值:
功能测试(一、二)
{
如果(两个)
警报('expected:second function with two parameters');
否则
警报(‘惊奇!第一个带有一个参数的函数’;
}
调用此函数时:
function test(one,two)
只有一个参数时,参数“two”将具有特殊类型:undefined。
任何访问变量two的尝试都将失败,并出现“two is undefined”错误,为避免此类错误,请使用typeof命令:
function test(one,two)
{
if (typeof two == "undefined") {
//give default value
two = "default value here";
}
...
}