簡單談?wù)凧avascript函數(shù)中的arguments
一、arguments的面貌
在javascript中所有的函數(shù)內(nèi)部都包含了一個(gè)隱藏的變量叫arguments;它存放著所有傳遞到這個(gè)函數(shù)中的參數(shù);
那么我們打開實(shí)例看看arguments的輸出形式
(function fn(){
console.log(arguments)
})(1,2,3,4)

結(jié)果好像是類似數(shù)組的形式打印在控制臺(tái),相信大多數(shù)人包括我看到這種輸出就會(huì)認(rèn)為arguments是一個(gè)數(shù)組,那么既然是數(shù)組就可以用數(shù)組的一些方法了吧,再看下一個(gè)例子;
(function fn(){
arguments.push(5)
console.log(arguments)
})(1,2,3,4)

結(jié)果報(bào)錯(cuò)了- -??;(在項(xiàng)目中我就是踩到了這個(gè)坑);
那我們就會(huì)有一個(gè)疑惑了,既然是數(shù)組為什么不能用push方法呢,其他的像pop,slice也不行么,是的,都不行,雖然arguments也能通過下標(biāo)的形式獲取到對應(yīng)位置的參數(shù),當(dāng)本質(zhì)上不算是真正的數(shù)組;
我們通過instanceof打印看看它是不是Array的孩子
(function fn(){
console.log(arguments instanceof Array)
})()

果不其然真不是數(shù)組,那么我們就會(huì)聯(lián)想到它就是個(gè)對象了;
雖然它也能用for循環(huán)遍歷到里面的參數(shù),但把它轉(zhuǎn)為真正的數(shù)組才是更好的選擇;
二、轉(zhuǎn)化為數(shù)組
轉(zhuǎn)化的方法有很多,對象冒充的方式傳遞給Array.prototype或遍歷push到空數(shù)組或傳遞給另一個(gè)函數(shù)等等。。都可以完成,下面簡單介紹幾個(gè)轉(zhuǎn)化的方法,遍歷push到空數(shù)組的方法就不細(xì)講了;
第一種方法:
(function fn(){
var arr = Array.prototype.slice.call(arguments)
arr.push(5)
console.log(arr)
})(1,2,3,4)

這種轉(zhuǎn)化方式比較慢,在性能不好的情況下不推薦這種寫法;
第二種方法:
function fn() {
fnArr.apply(null, arguments);
}
function fnArr(a,b,c,d) {
···
}
個(gè)人推薦這種做法;
總結(jié)
以上就是這篇文章的全部內(nèi)容了,雖然寫的不多,但還是希望大家能在項(xiàng)目的過程當(dāng)中不要誤踩了arguments的坑,希望本文能對大家有所幫助。
- javascript arguments 傳遞給函數(shù)的隱含參數(shù)
- JavaScript中使用arguments獲得函數(shù)傳參個(gè)數(shù)實(shí)例
- javascript函數(shù)中的arguments參數(shù)
- JavaScript arguments 多參傳值函數(shù)
- javascript下利用arguments實(shí)現(xiàn)string.format函數(shù)
- 理解Javascript_14_函數(shù)形式參數(shù)與arguments
- Javascript學(xué)習(xí)筆記之函數(shù)篇(四):arguments 對象
- JS函數(shù)arguments數(shù)組獲得實(shí)際傳參數(shù)個(gè)數(shù)的實(shí)現(xiàn)方法
- 深入理解JS函數(shù)的參數(shù)(arguments)的使用
相關(guān)文章
javascript:void(0)的含義及用法實(shí)例
這篇文章介紹了javascript:void(0)的含義及用法實(shí)例,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12
document.all與WEB標(biāo)準(zhǔn)
document.all與WEB標(biāo)準(zhǔn)...2006-11-11
將光標(biāo)定位于輸入框最右側(cè)實(shí)現(xiàn)代碼
如何將光標(biāo)定位于輸入框最右側(cè)的實(shí)現(xiàn)方式,這種做法很多人都需要,本文將詳細(xì)介紹,需要的朋友可以參考下2012-12-12
JavaScript DOM 學(xué)習(xí)第三章 內(nèi)容表格
在這一章我會(huì)解釋我的網(wǎng)站上的所有頁面都在運(yùn)行的內(nèi)容表格的代碼。他會(huì)生產(chǎn)這個(gè)頁面的所有h3和h4的列表,然后給他們添加一個(gè)鏈接。2010-02-02
有關(guān)于JS構(gòu)造函數(shù)的重載和工廠方法
有關(guān)于JS構(gòu)造函數(shù)的重載和工廠方法,對此有需要的朋友,參考一下。2013-04-04
Javascript數(shù)組循環(huán)遍歷之forEach詳解
本篇文章主要介紹了Javascript 數(shù)組循環(huán)遍歷之forEach詳解,對學(xué)習(xí)forEach有很好的幫助,有需要的可以了解一下。2016-11-11

