摘要:的面貌在中所有的函數(shù)內(nèi)部都包含了一個隱藏的變量叫它存放著所有傳遞到這個函數(shù)中的參數(shù)那么我們打開實例看看的輸出形式結(jié)果好像是類似數(shù)組的形式打印在控制臺,相信大多數(shù)人包括我看到這種輸出就會認(rèn)為是一個數(shù)組,那么既然是數(shù)組就可以用數(shù)組的一些方法了吧
arguments的面貌
在javascript中所有的函數(shù)內(nèi)部都包含了一個隱藏的變量叫arguments;
它存放著所有傳遞到這個函數(shù)中的參數(shù);
那么我們打開實例看看arguments的輸出形式
(function fn(){ console.log(arguments) })(1,2,3,4)
結(jié)果好像是類似數(shù)組的形式打印在控制臺,相信大多數(shù)人包括我看到這種輸出就會認(rèn)為arguments是一個數(shù)組,那么既然是數(shù)組就可以用數(shù)組的一些方法了吧,再看下一個例子;
(function fn(){ arguments.push(5) console.log(arguments) })(1,2,3,4)
結(jié)果報錯了- -!;(在項目中我就是踩到了這個坑);
那我們就會有一個疑惑了,既然是數(shù)組為什么不能用push方法呢,其他的像pop,slice也不行么,是的,都不行,雖然arguments也能通過下標(biāo)的形式獲取到對應(yīng)位置的參數(shù),當(dāng)本質(zhì)上不算是真正的數(shù)組;
我們通過instanceof打印看看它是不是Array的孩子
(function fn(){ console.log(arguments instanceof Array) })()
果不其然真不是數(shù)組,那么我們就會聯(lián)想到它就是個對象了;
雖然它也能用for循環(huán)遍歷到里面的參數(shù),但把它轉(zhuǎn)為真正的數(shù)組才是更好的選擇;
轉(zhuǎn)化的方法有很多,對象冒充的方式傳遞給Array.prototype或遍歷push到空數(shù)組或傳遞給另一個函數(shù)等等。。都可以完成,下面簡單介紹幾個轉(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) { ··· }
個人推薦這種做法;
總之方法很多,大家用自己習(xí)慣的就好;
第一次寫文章,雖然寫的不多,純當(dāng)練練手,只希望大家能在項目的過程當(dāng)中不要誤踩了arguments的坑,^ ^
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80955.html
摘要:函數(shù)調(diào)用有如下四種調(diào)用函數(shù)的方式作為函數(shù)作為方法作為構(gòu)造函數(shù)通過和返回函數(shù)的函數(shù)當(dāng)函數(shù)無明確返回值時,返回的值就是。直接聲明一個匿名函數(shù),立即使用。規(guī)定當(dāng)發(fā)生事件時運行的函數(shù)這種形式在中經(jīng)常見到。 概念 函數(shù)是由事件驅(qū)動的或者當(dāng)它被調(diào)用時執(zhí)行的可重復(fù)使用的代碼塊。 js 支持兩種函數(shù):一類是語言內(nèi)部的函數(shù)(如eval() ),另一類是自己創(chuàng)建的。 在 JavaScript 函數(shù)內(nèi)部聲...
摘要:提出標(biāo)準(zhǔn),允許腳本創(chuàng)建多個線程,但是子線程完全受主線程控制,且不得操作。所以,這個新標(biāo)準(zhǔn)并沒有改變單線程的本質(zhì)。事件循環(huán)主線程線程只會做一件事,就是從消息隊列里面取消息執(zhí)行消息,再取消息再執(zhí)行。工作線程是生產(chǎn)者,主線程是消費者。 最近項目中遇到了一個場景,其實很常見,就是定時獲取接口刷新數(shù)據(jù)。那么問題來了,假設(shè)我設(shè)置的定時時間為1s,而數(shù)據(jù)接口返回大于1s,應(yīng)該用同步阻塞還是異步?我們...
摘要:之前的文章里有說,在中,流是許許多多原生對象的父類,角色可謂十分重要。效率更高的從數(shù)組中去除一個元素。不過這個所提供的功能過于多了,它支持去除自定義數(shù)量的元素,還支持向數(shù)組中添加自定義的元素。 之前的文章里有說,在 Node.js 中,流(stream)是許許多多原生對象的父類,角色可謂十分重要。但是,當(dāng)我們沿著族譜往上看時,會發(fā)現(xiàn) EventEmitter 類是流(stream)類的...
摘要:我是這樣做的這兩個函數(shù),分別對和其對應(yīng)的傳參做出修改,并彈出結(jié)果。這和書中論述無異。然而在第二個函數(shù)中,將強行賦值為,輸出按照作者以上的論述斜體字部分,里的值應(yīng)該保持不變,結(jié)果應(yīng)該為才對。此時的值始終為因此才會有輸出這一結(jié)果。 showImg(https://segmentfault.com/img/bVCYcu); 這本紅寶書相信大家很熟悉,甚至比我讀過的次數(shù)要多,不過今天在閱讀函數(shù)...
摘要:所有作為參數(shù)傳入的值都會成為對象的數(shù)組元素執(zhí)行上下文的生命周期創(chuàng)建階段在這個階段中,執(zhí)行上下文會分別創(chuàng)建變量對象,建立作用域鏈,以及確定的指向。 JavaScript深入之從原型到原型鏈 構(gòu)造函數(shù)->原型每個函數(shù)都有一個 prototype 屬性,指向?qū)嵗脑驮停好恳粋€JavaScript對象(null除外)在創(chuàng)建的時候就會與之關(guān)聯(lián)另一個對象,這個對象就是我們所說的原型實例->原型...
閱讀 3160·2021-09-28 09:36
閱讀 3696·2021-09-08 09:45
閱讀 1812·2021-09-01 10:43
閱讀 3486·2019-08-30 12:44
閱讀 3353·2019-08-29 17:25
閱讀 1378·2019-08-29 11:03
閱讀 1998·2019-08-26 13:36
閱讀 703·2019-08-23 18:24