3 回答

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

TA貢獻(xiàn)1844條經(jīng)驗(yàn) 獲得超8個(gè)贊
傳播運(yùn)營商
spread運(yùn)算符允許在需要多個(gè)參數(shù)(用于函數(shù)調(diào)用)或多個(gè)元素(用于數(shù)組文字)的位置擴(kuò)展表達(dá)式。
ECMAScript ES6添加了一個(gè)新的運(yùn)算符,允許您以更實(shí)際的方式執(zhí)行此操作:... Spread運(yùn)算符。
不使用該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,則此代碼段會(huì)返回語法錯(cuò)誤。
編者注:由于代碼片段使用console.log()
,您必須打開瀏覽器的JS控制臺(tái)才能看到結(jié)果 - 沒有頁內(nèi)結(jié)果。
它會(huì)顯示以下結(jié)果:
簡而言之,如果您使用數(shù)組,擴(kuò)展運(yùn)算符可以用于不同的目的,因此它也可以用于函數(shù)參數(shù),您可以在官方文檔中看到類似的示例:Rest參數(shù)

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