3 回答

TA貢獻2021條經驗 獲得超8個贊
用于.apply()
對arguments
函數進行相同的訪問b
,如下所示:
function a(){ b.apply(null, arguments);}function b(){ alert(arguments); //arguments[0] = 1, etc}a(1,2,3);

TA貢獻1844條經驗 獲得超8個贊
傳播運營商
spread運算符允許在需要多個參數(用于函數調用)或多個元素(用于數組文字)的位置擴展表達式。
ECMAScript ES6添加了一個新的運算符,允許您以更實際的方式執行此操作:... Spread運算符。
不使用該apply
方法的示例:
function a(...args){ b(...args); b(6, ...args, 8) // You can even add more elements}function b(){ console.log(arguments)}a(1, 2, 3)
Note 如果您的瀏覽器仍使用ES5,則此代碼段會返回語法錯誤。
編者注:由于代碼片段使用console.log()
,您必須打開瀏覽器的JS控制臺才能看到結果 - 沒有頁內結果。
它會顯示以下結果:
簡而言之,如果您使用數組,擴展運算符可以用于不同的目的,因此它也可以用于函數參數,您可以在官方文檔中看到類似的示例:Rest參數

TA貢獻1784條經驗 獲得超8個贊
沒有任何其他的答案中提供的解釋是,原來的參數是仍然可用,但不是在原來的位置arguments
的對象。
所述arguments
對象包含提供給函數每個實際參數的一個元件。當你調用a
你提供三個參數:編號1
,2
和,3
。所以,arguments
包含[1, 2, 3]
。
function a(args){ console.log(arguments) // [1, 2, 3] b(arguments);}
b
但是,當你調用時,你只傳遞一個參數:a
's arguments
object。所以arguments
包含[[1, 2, 3]]
(即一個元素,它是具有包含原始參數的屬性a
的arguments
對象a
)。
function b(args){ // arguments are lost? console.log(arguments) // [[1, 2, 3]]}a(1,2,3);
正如@Nick演示的那樣,您可以使用在調用中apply
提供set arguments
對象。
以下結果取得了相同的結果:
function a(args){ b(arguments[0], arguments[1], arguments[2]); // three arguments}
但apply
在一般情況下是正確的解決方案。
添加回答
舉報