一道筆試題思考而來的,通常情況下沒人會在函數內部修改參數值。這裡僅拿出來討論,有三種方式可以修改。
1,直接修改函數宣告時的形參
function f1(a) {
alert(a);
a = 1;//修改形參a
alert(1 === a); }
f1(10);
函數f1定義了參數a,呼叫時傳參數10,先彈出10,修改a為1,彈出兩次true,a和arguments[0]都為1了。
2,透過函數內部的arguments物件修改
程式碼
function f2(a) {
alert(a);
arguments[0] = 1;//修改arguments
(1 === arguments[0]);
}
效果同函數f1。
3,函數內部宣告的局部變數與形參同名
程式碼如下:
function f3(a) {
alert(a);
var a = 1;//聲明局部變數a且賦值為1
a);
alert(arguments[0]);
}
f3(10);
函數f3定義了形參a,函數內部宣告局部變數a同時賦值為1,但這裡的a仍然是參數a,從最後彈出的arguments[0]修改為1可以證明。
4,如果只是宣告局部變數a,卻不賦值,情況又不一樣了
複製程式碼
複製程式碼
複製程式碼
複製程式碼 程式碼如下:function f3(a) { var a;//僅聲明,不賦值 ]); } f3(10); 這時候彈出的都是10,而不是undefined。