JavaScript関数パラメータの修正可能性についての質問

1240 ワード

本の筆記試験問題を考えてきましたが、通常は関数の内部でパラメーター値を修正する人がいません.ここでは出して討論します.3つの方法があります.
1、関数宣言を直接変更する場合のイメージ
 
  
function f1(a) {
    alert(a);
    a = 1;// a
    alert(1 === a);
    alert(1 === arguments[0]);
}
f1(10);
関数f 1はパラメータaを定義しており、呼び出し時にパラメータ10を呼び出し、まず10をイジェクトし、aを1に変更し、2回のtrueをイジェクトし、aとargments[0]はいずれも1になっている.
2,関数内部のargmentsオブジェクトによって修正します.
 
  
function f2(a) {
    alert(a);
    arguments[0] = 1;// arguments
    alert(1 === a);
    alert(1 === arguments[0]);

}
効果同関数f 1
3,関数内部で宣言された局所変数は、イメージと同名です.
 
  
function f3(a) {
    alert(a);
    var a = 1;// a 1
    alert(1 === a);
    alert(arguments[0]);
}
f3(10);
関数f 3は、モダリティaを定義し、関数内部で局所変数aを宣言しながら値を1としたが、ここのaは依然としてパラメータaであり、最後にポップアップされたargments[0]から1に変更して証明できる.
4,局所変数aを宣言するだけで、値が与えられない場合、状況はまた違っています.
 
  
function f3(a) {
    var a;// ,
    alert(a);
    alert(arguments[0]);
}
f3(10);
この時に弾いたのは全部10です.undefinedではありません.