JavaScript関数パラメータの修正可能性についての質問
1240 ワード
本の筆記試験問題を考えてきましたが、通常は関数の内部でパラメーター値を修正する人がいません.ここでは出して討論します.3つの方法があります.
1、関数宣言を直接変更する場合のイメージ
2,関数内部のargmentsオブジェクトによって修正します.
3,関数内部で宣言された局所変数は、イメージと同名です.
4,局所変数aを宣言するだけで、値が与えられない場合、状況はまた違っています.
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 13,関数内部で宣言された局所変数は、イメージと同名です.
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ではありません.