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

資訊專欄INFORMATION COLUMN

淺析js中的arguments

Astrian / 2494人閱讀

摘要:不過還好,我們可以通過的特性進(jìn)行統(tǒng)一對應(yīng)上面第一種情況對應(yīng)上面第二種情況因為在嚴(yán)格模式下,對象被禁止為函數(shù)參數(shù)創(chuàng)建和方法。使用代替只能被定義在函數(shù)參數(shù)的最后一個位置,傳進(jìn)函數(shù)的多余參數(shù)都將傳進(jìn)這個數(shù)組結(jié)束語歡迎指正錯誤和提出更多的關(guān)于的內(nèi)容

arguments就是傳遞進(jìn)函數(shù)的參數(shù)列表,它是一個類數(shù)組對象-Array-Like Object.
類數(shù)組對象,簡單來說就是擁有length屬性,如我們常用的NodeList,arguments,但卻不能使用數(shù)組方法,如forEach,map

1. length
var foo = function () {
  console.log(arguments.length)
}
foo() // 0
foo(1, 2) // 2
2. Function.arguments永遠(yuǎn)不要使用,已被廢除,直接使用arguemnts對象 3. arguments對象會被參數(shù)或變量arguments覆蓋
var foo = function () {
  console.log(arguments) // [10]
}
foo(10)

var bar = function (arguments) {
  console.log(arguments) // 10
}
bar(10)

var foo = function () {
  console.log(arguments) // [10]
}
foo(10)
var bar = function (arguments) {
  arguments = 20
  console.log(arguments) // 20
}
bar(20)
4.將arguments對象轉(zhuǎn)化為數(shù)組對象

arguments = [].slice.call(arguments)

arguments = Array.from(arguments)

待補充(暫時沒想到其余簡潔的寫法.)

5. arguments.callee指向當(dāng)前正在被執(zhí)行的函數(shù) -- 應(yīng)當(dāng)停止使用

最常見的一個例子
階乘

var foo = function (x) {
  return x >= 1 ? x * arguments.callee(x-1) : 1
}
console.log(foo(3)) // 6

關(guān)于它更詳盡的解釋,我更愿意給你推薦下面這個鏈接。
link-可能需要自備梯子
值得注意的一點是,在下面我們提到的ES5 use strict模式下,使用arguments.callee會報錯.

5. arguments數(shù)量 >= parameters數(shù)量 -- 雙向綁定
var foo = function (x, y) {
  arguments[0] = 10
  console.log(arguments[0], x) //10, 10

  x = 20
  console.log(arguments[0], x) //20, 20

  arguments[1] = 30
  console.log(arguments[1], y) //30, 30

  y = 40
  console.log(arguments[1], y) //40, 40
}
foo(1, 2)
6. arguments數(shù)量 < parameters數(shù)量 -- 缺省參數(shù)未雙向綁定
var foo = function (x, y) {
  arguments[0] = 10
  console.log(arguments[0], x) //10, 10

  x = 20
  console.log(arguments[0], x) //20, 20

  arguments[1] = 30
  console.log(arguments[1], y) //30, undefined

  y = 40
  console.log(arguments[1], y) //40, 40
}
foo(1)
7. use strict

以上2種情況,會給我們在使用時稍不注意,不去區(qū)分,就會犯錯。
不過還好,我們可以通過ES 5use strict特性進(jìn)行統(tǒng)一.

//對應(yīng)上面第一種情況
var foo = function (x, y) {
  "use strict"
  arguments[0] = 10
  console.log(arguments[0], x) //10, 1

  x = 20
  console.log(arguments[0], x) //10, 20

  arguments[1] = 30
  console.log(arguments[1], y) //30, 2

  y = 40
  console.log(arguments[1], y) //30, 40
}
foo(1, 2)
//對應(yīng)上面第二種情況
var foo = function (x, y) {
  "use strict"
  arguments[0] = 10
  console.log(arguments[0], x) //10, 1

  x = 20
  console.log(arguments[0], x) //10, 20

  arguments[1] = 30
  console.log(arguments[1], y) //30, undefined

  y = 40
  console.log(arguments[1], y) //30, 40
}
foo(1)

因為在嚴(yán)格模式下,arguments對象被禁止為函數(shù)參數(shù)創(chuàng)建gettersetter方法。

8. 使用...Rest代替

...Rest只能被定義在函數(shù)參數(shù)的最后一個位置,傳進(jìn)函數(shù)的多余參數(shù)都將傳進(jìn)這個數(shù)組

var foo = function (x, y, ...z) {
  console.log(z) // [3, 4, 5]
  console.log(Array.isArray(z)) // true
}
foo(1, 2, 3, 4, 5)
結(jié)束語
歡迎指正錯誤和提出更多的關(guān)于`arguments`的內(nèi)容~

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/86849.html

相關(guān)文章

  • 淺析Vue響應(yīng)式原理(三)

    摘要:響應(yīng)式原理之不論如何,最終響應(yīng)式數(shù)據(jù)都要通過來實現(xiàn),實際要借助新增的。在函數(shù)內(nèi),首先實例化一個實例,會在稍后添加為響應(yīng)式數(shù)據(jù)自定義的中發(fā)揮作用。只有數(shù)組和對象才可能是響應(yīng)式,才能返回實例。參考鏈接技術(shù)內(nèi)幕揭開數(shù)據(jù)響應(yīng)系統(tǒng)的面紗源碼 Vue響應(yīng)式原理之defineReactive defineReactive 不論如何,最終響應(yīng)式數(shù)據(jù)都要通過defineReactive來實現(xiàn),實際要借助...

    tomener 評論0 收藏0
  • koa-router 源碼淺析

    摘要:代碼結(jié)構(gòu)執(zhí)行流程上面兩張圖主要將的整體代碼結(jié)構(gòu)和大概的執(zhí)行流程畫了出來,畫的不夠具體。那下面主要講中的幾處的關(guān)鍵代碼解讀一下。全局的路由參數(shù)處理的中間件組成的對象。 代碼結(jié)構(gòu) showImg(https://segmentfault.com/img/remote/1460000007468236?w=1425&h=1772); 執(zhí)行流程 showImg(https://segmentf...

    SillyMonkey 評論0 收藏0
  • 淺析webpack源碼之processOptions處理Options以及入口函數(shù)(三)

    摘要:我們打開根據(jù)上次所返回的這個因為有了上次的基礎(chǔ),比較容易讀了大體邏輯是這樣的先定義一個空對象同上次的一個邏輯,還是一個目前的方式只有一個滿足如果滿足的會執(zhí)行一系列函數(shù)這個函數(shù)直接結(jié)果是的影響是打比如如果滿足的話當(dāng)你的時候就會在頁面上出 我們打開bin/cli.js根據(jù)上次所返回的Options processOptions(options)這個因為有了上次的基礎(chǔ),比較容易讀了,大體邏輯...

    doodlewind 評論0 收藏0
  • redux淺析

    摘要:概念是一個狀態(tài)管理容器使用可以更好的管理和監(jiān)測組件之間需要通信的數(shù)據(jù)。參考源碼參考鏈接 redux概念 redux是一個狀態(tài)管理容器,使用redux可以更好的管理和監(jiān)測組件之間需要通信的數(shù)據(jù)。 redux基本原則 單一數(shù)據(jù)源 在redux中,整個應(yīng)用保持一個數(shù)據(jù)源,數(shù)據(jù)源是一個樹形的結(jié)構(gòu) 狀態(tài)只讀 狀態(tài)只讀意思是不能直接修改,需要通過dispatch action方式才可以,返回的是一...

    galois 評論0 收藏0
  • 淺析ajax

    摘要:如果響應(yīng)的內(nèi)容類型是或,這個屬性將保存包含著響應(yīng)數(shù)據(jù)的文檔。響應(yīng)的狀態(tài)狀態(tài)的說明當(dāng)對象把一個請求發(fā)送到服務(wù)器的過程中會經(jīng)歷幾個狀態(tài),直到請求被處理,然后才接收一個回應(yīng)。 1.什么是Ajax Ajax:是Asynchronous Javascript And XML的簡寫,即異步JavaScript和XML用途:動態(tài)刷新局部數(shù)據(jù),無需卸載整個頁面,從而帶來更好的用戶體驗Ajax核心:XM...

    objc94 評論0 收藏0

發(fā)表評論

0條評論

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