JavaScriptの中でargmentsオブジェクト


テンセント面接でこんな問題がありました.
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ではありません.
結論:着信パラメータは永遠に変更しないでください.プログラムが読みにくいだけでなく、探しにくいバグです.