Javascript函数定义和函数调用的区别

时间:2013-07-16 05:56:50

标签: javascript function arguments

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 个答案:

答案 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