国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

簡單談談Javascript函數中的arguments

2019-11-19 17:39:57
字體:
來源:轉載
供稿:網友

一、arguments的面貌

在javascript中所有的函數內部都包含了一個隱藏的變量叫arguments;它存放著所有傳遞到這個函數中的參數;

那么我們打開實例看看arguments的輸出形式

(function fn(){ console.log(arguments)})(1,2,3,4)

結果好像是類似數組的形式打印在控制臺,相信大多數人包括我看到這種輸出就會認為arguments是一個數組,那么既然是數組就可以用數組的一些方法了吧,再看下一個例子;

(function fn(){ arguments.push(5) console.log(arguments)})(1,2,3,4)

結果報錯了- -!;(在項目中我就是踩到了這個坑);

那我們就會有一個疑惑了,既然是數組為什么不能用push方法呢,其他的像pop,slice也不行么,是的,都不行,雖然arguments也能通過下標的形式獲取到對應位置的參數,當本質上不算是真正的數組;

我們通過instanceof打印看看它是不是Array的孩子

(function fn(){ console.log(arguments instanceof Array)})()

果不其然真不是數組,那么我們就會聯想到它就是個對象了;

雖然它也能用for循環遍歷到里面的參數,但把它轉為真正的數組才是更好的選擇;

二、轉化為數組

轉化的方法有很多,對象冒充的方式傳遞給Array.prototype或遍歷push到空數組或傳遞給另一個函數等等。。都可以完成,下面簡單介紹幾個轉化的方法,遍歷push到空數組的方法就不細講了;

第一種方法:

(function fn(){ var arr = Array.prototype.slice.call(arguments) arr.push(5) console.log(arr)})(1,2,3,4)

這種轉化方式比較慢,在性能不好的情況下不推薦這種寫法;

第二種方法:

function fn() { fnArr.apply(null, arguments);}function fnArr(a,b,c,d) { ???}

個人推薦這種做法;

總結

以上就是這篇文章的全部內容了,雖然寫的不多,但還是希望大家能在項目的過程當中不要誤踩了arguments的坑,希望本文能對大家有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 微山县| 凌源市| 丹棱县| 临猗县| 北碚区| 池州市| 屯昌县| 延川县| 仙居县| 肇州县| 华蓥市| 南康市| 张家港市| 建德市| 北票市| 长垣县| 石渠县| 古蔺县| 衡阳县| 吕梁市| 盐源县| 多伦县| 长白| 绥化市| 惠水县| 邯郸县| 寿宁县| 横峰县| 古蔺县| 西峡县| 汶上县| 土默特左旗| 新晃| 许昌市| 宜兴市| 景洪市| 贵溪市| 岚皋县| 油尖旺区| 法库县| 方正县|