初學js的時候,對arguments這個東西常見,就是搞不清他的意思~ 下面是我找到的一些資料和我的了解,終于弄懂了這個家夥
首先arguments指向實參對象
在函數體内,辨別符arguments是指向實參對象的引用,實參對象是一個類數組對象 arguments[0],arguments.length,類數組不是數組,雖然也有數組的前面這兩種屬性,具體判斷可以使用instanceof來判斷一下
instanceof 用于判斷一個執行個體是否是某種類型
在 typeof 方法傳回 “object” 的情況下,instanceof 方法還是很有用的。
arrayLike instanceof Array
// false
其值是布爾值那麼問題來了
arguments是什麼?
1. arguments是收到的實參副本
在詞法分析中, 首先按形參形成AO的屬性,值為undefined
當實參傳來時, 再修改AO的相應屬性.
2:并把所有收到實參收集起來,放到一個arguments對象裡
function t(a,b,c){},
調用時: t(1,2,3,4,5) 5個參數,這裡傳入了5個參數
此時 , AO屬性隻有a,bc,3個屬性, 但是arguments裡有1,2,3,4,5, 所有的值,這個arguments就用來存儲傳入的所有參數
對于超出形參個數之外的實參, 可以通過arguments來獲得
3. arguments 的索引 從 0, 1,2,....遞增,與實參逐個對應
4. arguments.length 屬性代表實參的個數
5. arguments一定不是數組, 是長的比較像數組的一個對象,雖然也有length屬性
6:arguments每個函數都會有,是以,arguemnts隻會在内部找自身的arguments,
無法引用到外層的arguments
1 <script type="text/javascript">
2 // 求圓形面積,矩形面積, 三角形面積
3 function area () {
4 if(arguments.length == 1) {
5 alert(3.14 * arguments[0] * arguments[0]);
6 } else if(arguments.length == 2) {
7 alert(arguments[0] * arguments[1]);
8 } else if(arguments.length == 3) {
9 alert(arguments[0] + arguments[1] + arguments[2]);
10 } else {
11 return null;
12 }
13 }
14 area(10,20,30);
15
16 </script>
下面是W3C上的一些解釋
arguments 對象
在函數代碼中,使用特殊對象 arguments,開發者無需明确指出參數名,就能通路它們。
例如,在函數 sayHi() 中,第一個參數是 message。用 arguments[0] 也可以通路這個值,即第一個參數的值(第一個參數位于位置 0,第二個參數位于位置 1,依此類推)。
是以,無需明确命名參數,就可以重寫函數:
function sayHi() {
if (arguments[0] == "bye") {
return;
}
alert(arguments[0]);
}
檢測參數個數
還可以用 arguments 對象檢測函數的參數個數,引用屬性 arguments.length 即可。
下面的代碼将輸出每次調用函數使用的參數個數:
1 function howManyArgs() {
2
3 alert(arguments.length);
4
5 }
6
7
8
9 howManyArgs("string", 45);
10
11 howManyArgs();
12
13 howManyArgs(12);
上面這段代碼将依次顯示 "2"、"0" 和 "1"。
注釋:與其他程式設計語言不同,ECMAScript 不會驗證傳遞給函數的參數個數是否等于函數定義的參數個數。開發者定義的函數都可以接受任意個數的參數(根據 Netscape 的文檔,最多可接受 255 個),而不會引發任何錯誤。任何遺漏的參數都會以 undefined 傳遞給函數,多餘的函數将忽略。
轉載于:https://www.cnblogs.com/nostic/p/5406472.html