2012-12-31 43 views
3

爲什麼此功能警告10?簡單功能說明

function b (x, y, a) { 
    arguments[2] = 10; 
    alert(a); 
} 

b(1, 2, 3); 
+3

它不是* *返回任何此引用。 – BenM

+0

我沒有做太多的JavaScript,但一個谷歌的「JavaScript參數」給了我一個很好的結果作爲第一個結果 – PeterJ

+0

我認爲參數只是另一個數組:( – user1612293

回答

9

JavaScript的陣列被零索引和參數是指傳遞到函數作爲參數參數:

arguments[2] === a === 10 

1 === x === arguments[0]; 
2 === y == arguments[1]; 

(和triple equality操作者是不是一個錯誤)

+0

那些*狡猾的辮子*。 –

+0

也許值得一提:直接更改'arguments'對象並不是一個好主意。也許使用'var writeableArgs = Array.prototype.slice(arguments,[0]);',並使用返回的數組 –

4

因爲您將第三個參數設置爲10.從MDN

您可以通過使用 arguments對象是指一個函數的參數的函數內。這個對象包含傳遞給函數每個參數 的入口,第一入口的指數從0開始。對於 例如,如果一個函數傳遞三個參數,你可以參考 參數如下:

arguments[0] 
arguments[1] 
arguments[2] 
1

這個函數有三個輸入,丟棄前兩個和顯示最後的模式彈出,而不是2arguments的索引分配值10前 - 有效輸入a3設置爲10 - 它然後退出範圍而不返回什麼都沒有。