JavaScriptの中でargmentsオブジェクト
2563 ワード
テンセント面接でこんな問題がありました.
出力結果は何ですか?
このテーマは主にjsの中の形参と実参を区別するために、関数の形参を得る方法はargments.callee.lengthで、実参はargments.lengthです.
argments[0],argments[1]取得は何の結果ですか?
argments[0],argments[1]:主にユーザーがtest関数を呼び出した時に実際にパラメータを伝えるために用いられます.
test関数が期待するのは2つのパラメータですが、ユーザが呼び出した時には実際の参加が与えられていませんので、出力結果はundefined、undefinedです.しかし、このようにtestを呼び出すと、出力は1になります.なぜ10は着信パラメータ値1ではなく10ですか?関数内部の優先度ですか?それとも関数内部の局所変数が、実参照xをカバーしていますか?大牛の指摘を望みますか?
他人の説明を借りる:
1、関数宣言を直接変更する場合のイメージ
Jsコード
2,関数内部のargmentsオブジェクトによって修正します.
Jsコード
3,関数内部で宣言された局所変数は、イメージと同名です.
Jsコード
ローカル変数aを宣言するだけで、値が与えられない場合は、また違っています.
Jsコード
結論:着信パラメータは永遠に変更しないでください.プログラムが読みにくいだけでなく、探しにくいバグです.
function test(x,y){
var x = 10;
alert(arguments[0],arguments[1]);
}
test();
argmentsデータAray.prototype.slic.allを取得して、1つの配列[]を返します.出力結果は何ですか?
このテーマは主にjsの中の形参と実参を区別するために、関数の形参を得る方法はargments.callee.lengthで、実参はargments.lengthです.
argments[0],argments[1]取得は何の結果ですか?
argments[0],argments[1]:主にユーザーがtest関数を呼び出した時に実際にパラメータを伝えるために用いられます.
test関数が期待するのは2つのパラメータですが、ユーザが呼び出した時には実際の参加が与えられていませんので、出力結果はundefined、undefinedです.しかし、このようにtestを呼び出すと、出力は1になります.なぜ10は着信パラメータ値1ではなく10ですか?関数内部の優先度ですか?それとも関数内部の局所変数が、実参照xをカバーしていますか?大牛の指摘を望みますか?
他人の説明を借りる:
1、関数宣言を直接変更する場合のイメージ
Jsコード
1. function f1(a) {
2. alert(a);
3. a = 1;// a
4. alert(1 === a);
5. alert(1 === arguments[0]);
6. }
7. f1(10);
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オブジェクトによって修正します.
Jsコード
1. function f2(a) {
2. alert(a);
3. arguments[0] = 1;// arguments
4. alert(1 === a);
5. alert(1 === arguments[0]);
6.
7. }
function f2(a) {
alert(a);
arguments[0] = 1;// arguments
alert(1 === a);
alert(1 === arguments[0]);
}
効果は同じです3,関数内部で宣言された局所変数は、イメージと同名です.
Jsコード
1. function f3(a) {
2. alert(a);
3. var a = 1;// a 1
4. alert(1 === a);
5. alert(arguments[0]);
6. }
7. f3(10);
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に変更して証明できる.ローカル変数aを宣言するだけで、値が与えられない場合は、また違っています.
Jsコード
1. function f3(a) {
2. var a;// ,
3. alert(a);
4. alert(arguments[0]);
5. }
6. f3(10);
function f3(a) {
var a;// ,
alert(a);
alert(arguments[0]);
}
f3(10);
この時に弾いたのは全部10です.undefinedではありません.結論:着信パラメータは永遠に変更しないでください.プログラムが読みにくいだけでなく、探しにくいバグです.