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);
}

ここで、[クリック] ボタンをクリックすると、アラート 10 が表示されます。しかし、関数呼び出しには 1 つの引数しかなく、関数定義には 2 つの引数があります。では、引数の数に関するエラーを生成する代わりに、値をアラートするのはなぜですか?

4

4 に答える 4

2

これは、Javascript では引数がオプションであるためです。

デフォルト値があるため、疑似コードでは次のようになります

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

Javascript では、関数定義にリストされている引数は名前付き引数です。ただし、それらはオプションです。したがって、次のように関数を呼び出すことは完全に可能です。

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

最初のケースでは、引数 b の値は になりますundefined。3 番目のケースでは、値 3 を受け取る変数はありません。しかし、それはまだ存在しています。関数に渡されるすべての値は、引数配列を介してアクセスできます。したがってarguments[2]、値 3 が含まれます。

この柔軟性を考えると、欠点もあります。他の多くのプログラミング言語やスクリプト言語とは異なり、Javascript には関数ポリモーフィズムがありません。つまり、同じ名前の関数は 1 つしか存在できません。したがって、次のように 2 つの関数を定義することはできません。

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

Javascript 関数の詳細については、インターネット全体で見つけることができますが、このページから始めるとよいでしょう: http://javascript.info/tutorial/arguments

于 2013-07-16T06:14:24.840 に答える
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 に答える