成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JS函數(shù)里的arguments

Ku_Andrew / 611人閱讀

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

相關(guān)文章

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

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

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

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

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

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

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

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

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

    摘要:所有作為參數(shù)傳入的值都會成為對象的數(shù)組元素執(zhí)行上下文的生命周期創(chuàng)建階段在這個階段中,執(zhí)行上下文會分別創(chuàng)建變量對象,建立作用域鏈,以及確定的指向。 JavaScript深入之從原型到原型鏈 構(gòu)造函數(shù)->原型每個函數(shù)都有一個 prototype 屬性,指向?qū)嵗脑驮停好恳粋€JavaScript對象(null除外)在創(chuàng)建的時候就會與之關(guān)聯(lián)另一個對象,這個對象就是我們所說的原型實例->原型...

    everfight 評論0 收藏0

發(fā)表評論

0條評論

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