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