[英]Arguments object is not showing correct result
看這段代碼
enter code here
function foo(a, b) {
arguments[1] = 2;
alert(b);
}
console.log(foo(1));
其顯示undefined
我無法理解為什么..因為當我們通過辯論者時
foo(1) `arguments[0]=1` right.?
並且當我們alert(b)
它應該顯示2,因為我們設置了arguments[1] = 2
; 我很困惑..請幫助。 謝謝。
通過arguments
對象僅對調用函數時存在的原始參數進行“別名”處理,以便您可以更改參數對象並使其自動影響命名的函數參數。
僅供參考,在嚴格模式下, arguments
對象上的所有項目都不會別名化回命名的函數形參。 但是,在非嚴格模式下,原來存在的參數(只有那些參數)會通過arguments
對象作為別名。
請記住,arguments對象不是真正的數組。 它是對象的一種特殊類型,這種特殊的“混疊”行為僅存在於調用函數時最初放置在該對象中的對象的屬性,而不存在於您可能自己添加的屬性。 由於arguments[1]
最初不存在,因此沒有此特殊功能。
看到這個:
function foo(a, b) {
console.log(arguments.length); // 1
arguments[1] = 2;
console.log(arguments.length); // still 1
console.log(arguments[1]); // does show 2
console.log(b); // undefined, arguments[1] is not aliased to b
}
console.log(foo(1));
手動將元素添加到arguments
將無法正確設置setter和getter。 甚至.length
都不會更新。
function foo(a, b){
arguments[1] = 2;
console.log(arguments.length); //1
}
foo(1);
簡介:不要將元素添加到arguments
。 請記住, arguments
不是數組。
b
保持undefined
是有道理的。 運行foo(1)
,它將a
初始化為1
並將b
初始化為undefined
。 修改arguments
對象不會改變它。 也就是說, b
沒有綁定到arguments[1]
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.