0

html

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <input type='button' name='test' id='test' value='Click'/>
</body>
</html>

Javascript

$(document).ready(function(){
  $('#test').on('click',function(){
    var a = 10;
   testFunction(a);
  });
});

function testFunction(a,b){
  alert(a);
}

在这里,当我单击 Click 按钮时,它会发出警报 10。但是在函数调用中我只有一个参数,而在函数定义中我有两个参数。那么为什么它会提醒值而不是产生关于参数数量的任何错误。?

4

4 回答 4

2

那是因为在 Javascript 中,参数是可选的。

他们有一个默认值,所以在伪代码中它会是

function testFunction(a = undefined,b = undefined){
  alert(a);
}
于 2013-07-16T06:01:31.147 回答
0

JS 中的参数是动态的,如果一个参数已经定义但没有传入也没有在函数中使用,那么它不会抛出错误。如果你想检查至少有 2 个参数,你可以这样做:

function test(a,b) {
  if (arguments.length < 2) {
    // throw error, or return false, or something else
  }
}

arguments您甚至可以通过伪数组使用函数中未定义的参数。参数的数量是在调用函数时确定的,而不是在创建函数时确定的。

于 2013-07-16T06:00:41.563 回答
0

除非您这样做,否则不需要参数。JavaScript 是动态的,因此未使用的参数会被忽略。

function testFunction(a,b){
    if (b == undefined) throw new Error("Variable b in testFunction is undefined");
    alert(a);
}
于 2013-07-16T06:00:59.397 回答
0

在 Javascript 中,函数定义中列出的参数是命名参数。然而,它们是可选的。所以完全可以像这样调用你的函数:

testFunction(1);
testFunction(1, 2);
testFunction(1, 2, 3);

在第一种情况下,参数 b 的值将是undefined。在第三种情况下,将没有变量接收值 3。但是它仍然存在。传递给函数的所有值都可以通过参数数组访问。所以arguments[2]将包含值 3。

鉴于这种灵活性,也有一个缺点。与许多其他编程或脚本语言不同,Javascript 中没有函数多态性。这意味着只能有 1 个具有相同名称的函数。所以你不能像这样定义2个函数:

function testFunction(a, b) { ... }
function testFunction(a, b, c) { ... }

您可以在 Internet 上找到有关 Javascript 函数的更多信息,但此页面是一个好的开始:http: //javascript.info/tutorial/arguments

于 2013-07-16T06:14:24.840 回答