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.但是在函数调用中我只有一个参数,而在函数定义中我有两个参数。所以它为什么会提醒值而不是产生有关参数数量的任何错误?
答案 0 :(得分:2)
这是因为在Javascript中,参数是可选。
他们有一个默认值,因此在伪代码中它将是
function testFunction(a = undefined,b = undefined){
alert(a);
}
答案 1 :(得分:0)
JS中的参数是动态的,如果已定义参数但未在函数中传入或使用,则它不会抛出错误。如果要检查至少有2个参数,可以执行此操作:
function test(a,b) {
if (arguments.length < 2) {
// throw error, or return false, or something else
}
}
您甚至可以通过arguments
伪数组使用函数中未定义的参数。参数个数是在调用函数时确定的,而不是在创建函数时确定的。
答案 2 :(得分:0)
除非你这样做,否则不需要参数。 JavaScript是动态的,因此未使用的参数将被忽略。
function testFunction(a,b){
if (b == undefined) throw new Error("Variable b in testFunction is undefined");
alert(a);
}
答案 3 :(得分:0)
在Javascript中,函数定义中列出的参数是命名参数。然而,它们是可选的。所以完全有可能像这样调用你的函数:
testFunction(1);
testFunction(1, 2);
testFunction(1, 2, 3);
在第一种情况下,参数b的值将为undefined
。
在第三种情况下,没有变量接收值3.但它仍然存在。传递给函数的所有值都可以通过arguments数组访问。因此arguments[2]
将包含值3。
鉴于这种灵活性,也有一个缺点。与许多其他编程或脚本语言不同,Javascript中没有函数多态。这意味着只能有1个具有相同名称的函数。所以你不能像这样定义2个函数:
function testFunction(a, b) { ... }
function testFunction(a, b, c) { ... }
您可以在互联网上找到有关Javascript功能的更多信息,但此页面是一个良好的开端:http://javascript.info/tutorial/arguments