亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JS函數(shù)里的arguments

Ku_Andrew / 648人閱讀

摘要:的面貌在中所有的函數(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)化為數(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

相關(guān)文章

  • JavaScript學(xué)習(xí)總結(jié)(四)function函數(shù)部分

    摘要:函數(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)部聲...

    cfanr 評論0 收藏0
  • 從setTimeout-setInterval看JS線程

    摘要:提出標(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)該用同步阻塞還是異步?我們...

    elliott_hu 評論0 收藏0
  • 通過源碼解析 Node.js 中 events 模塊里的優(yōu)化小細(xì)節(jié)

    摘要:之前的文章里有說,在中,流是許許多多原生對象的父類,角色可謂十分重要。效率更高的從數(shù)組中去除一個(gè)元素。不過這個(gè)所提供的功能過于多了,它支持去除自定義數(shù)量的元素,還支持向數(shù)組中添加自定義的元素。 之前的文章里有說,在 Node.js 中,流(stream)是許許多多原生對象的父類,角色可謂十分重要。但是,當(dāng)我們沿著族譜往上看時(shí),會發(fā)現(xiàn) EventEmitter 類是流(stream)類的...

    cloud 評論0 收藏0
  • 關(guān)于js高級程序設(shè)計(jì)第三版中關(guān)于arguments論述的一個(gè)錯誤

    摘要:我是這樣做的這兩個(gè)函數(shù),分別對和其對應(yīng)的傳參做出修改,并彈出結(jié)果。這和書中論述無異。然而在第二個(gè)函數(shù)中,將強(qiáng)行賦值為,輸出按照作者以上的論述斜體字部分,里的值應(yīng)該保持不變,結(jié)果應(yīng)該為才對。此時(shí)的值始終為因此才會有輸出這一結(jié)果。 showImg(https://segmentfault.com/img/bVCYcu); 這本紅寶書相信大家很熟悉,甚至比我讀過的次數(shù)要多,不過今天在閱讀函數(shù)...

    spademan 評論0 收藏0
  • 筆記:javascript 深入理解

    摘要:所有作為參數(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í)例->原型...

    everfight 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<