理解JavaScript中的Arguments

一、Arguments是什麼?

Arguments是JavaScript裡函數的參數列表,每個函數(箭頭函數除外)都有這麼一個特別的變量用來表示所有傳遞到這個函數中參數。看一段代碼,可以發現arguments像一個數組把參數列出來。

理解JavaScript中的Arguments

arguments是什麼

二、Arguments有以下幾個特點

1、參數是值傳遞,但它跟參數是引用關係

a) 首先JS參數是值傳遞,從以下代碼可以看出變量重新賦值以後並不會影響之前的變量

理解JavaScript中的Arguments

值傳遞

b) 參數與arguments對象成員與對應參數是引用關係,修改會影響彼此

理解JavaScript中的Arguments

arguments修改時會影響參數,它們是同一個引用

2、通過arguments可以獲得函數自身以及調用者

理解JavaScript中的Arguments

arguments.callee指向函數自身

理解JavaScript中的Arguments

argumnets.callee.caller指向函數的調用者,注意與this的區別

3、 Arguments對象不是一個 Array,它類似於Array,它除了length屬性和可以索引元素之外沒有任何Array的方法。比如push,pop,forEach等。

理解JavaScript中的Arguments

arguments is like Array

可以將arguments方便地轉換為數組

理解JavaScript中的Arguments

Array from Arguments

4、 箭頭函數中沒有arguments

理解JavaScript中的Arguments

arrow function have no arguments

5、 默認參數和不定參數rest,對於這種會開闢新的作用域,修改後互不影響

理解JavaScript中的Arguments

默認參數

理解JavaScript中的Arguments

不定參數

理解JavaScript中的Arguments

不定參數

總結

以上就是關於arguments的介紹,arguments確實很有用,可以幫助我們實現類似函數重載的功能,也可以不用一開始就把形參明確,更可以把arguments往下傳遞。但要注意的是,因為arguments與參數是引用關係,做修改時最好先轉化為數組,以便引起誤會。同時callee與caller也易引起混淆,且效率不高,是不建議使用的,最好是利用不定參數rest來替代arguments,在使用不定參數和默認參數值時記住會開闢新的作用域出來。



分享到:


相關文章: