国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS函數里的arguments

Ku_Andrew / 607人閱讀

摘要:的面貌在中所有的函數內部都包含了一個隱藏的變量叫它存放著所有傳遞到這個函數中的參數那么我們打開實例看看的輸出形式結果好像是類似數組的形式打印在控制臺,相信大多數人包括我看到這種輸出就會認為是一個數組,那么既然是數組就可以用數組的一些方法了吧

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的坑,^ ^

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80955.html

相關文章

  • JavaScript學習總結(四)function函數部分

    摘要:函數調用有如下四種調用函數的方式作為函數作為方法作為構造函數通過和返回函數的函數當函數無明確返回值時,返回的值就是。直接聲明一個匿名函數,立即使用。規定當發生事件時運行的函數這種形式在中經常見到。 概念 函數是由事件驅動的或者當它被調用時執行的可重復使用的代碼塊。 js 支持兩種函數:一類是語言內部的函數(如eval() ),另一類是自己創建的。 在 JavaScript 函數內部聲...

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

    摘要:提出標準,允許腳本創建多個線程,但是子線程完全受主線程控制,且不得操作。所以,這個新標準并沒有改變單線程的本質。事件循環主線程線程只會做一件事,就是從消息隊列里面取消息執行消息,再取消息再執行。工作線程是生產者,主線程是消費者。 最近項目中遇到了一個場景,其實很常見,就是定時獲取接口刷新數據。那么問題來了,假設我設置的定時時間為1s,而數據接口返回大于1s,應該用同步阻塞還是異步?我們...

    elliott_hu 評論0 收藏0
  • 通過源碼解析 Node.js 中 events 模塊里的優化小細節

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

    cloud 評論0 收藏0
  • 關于js高級程序設計第三版中關于arguments論述的一個錯誤

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

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

    摘要:所有作為參數傳入的值都會成為對象的數組元素執行上下文的生命周期創建階段在這個階段中,執行上下文會分別創建變量對象,建立作用域鏈,以及確定的指向。 JavaScript深入之從原型到原型鏈 構造函數->原型每個函數都有一個 prototype 屬性,指向實例的原型原型:每一個JavaScript對象(null除外)在創建的時候就會與之關聯另一個對象,這個對象就是我們所說的原型實例->原型...

    everfight 評論0 收藏0

發表評論

0條評論

Ku_Andrew

|高級講師

TA的文章

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