簡體   English   中英

參數對象未顯示正確的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM