首先有一個JavaScript函數
程式碼
<span style="font-family: 'courier new', courier;">function test(a, b, c, d) { return a + b; }</span>
在JavaScript中呼叫一個函數的實參個數可以和被呼叫函數的形參個數不匹配,要求並沒有像java那麼嚴格,因為在ECMAScript中的參數在內部是用一個數組來表示的,函數被調用的時候接收到的始終是這個數組,而不關心數組中包含包含哪些參數,甚至是沒有元素也無所謂
Js代碼
<span style="font-family: 'courier new', courier;">function test(a, b, c, d) { return a + b; }
console. log(test(10, 20));
這樣的程式碼在JavaScript中是不會報錯的,同時在JavaScript中我們可以透過下列程式碼取得實參及形參的個數
Js程式碼
<span style="font-family: 'courier new', courier;">function test(a, b, c, d) { console.log(test.length);//这里获得的是形参的个数 console.log(arguments.length);//这里获得的是实参的个数,这段代码必须放在函数内部 }
console.log(test(10, 20));
同時有類似的物件
<span style="font-family: 'courier new', courier;">function test2(num) { if(num <= 1) return 1; else return num*arguments.callee(num-1); } console.log(test2(5));</span>若將arguments.callee(num-1)改為test2(num-1),會在下列呼叫中會報錯Js程式碼
<span style="font-family: 'courier new', courier;">var F = test2; test2 = null; console.log(F(5));</span>