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

資訊專欄INFORMATION COLUMN

淺析js中的arguments

Astrian / 2440人閱讀

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

arguments就是傳遞進(jìn)函數(shù)的參數(shù)列表,它是一個(gè)類(lèi)數(shù)組對(duì)象-Array-Like Object.
類(lèi)數(shù)組對(duì)象,簡(jiǎn)單來(lái)說(shuō)就是擁有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對(duì)象 3. arguments對(duì)象會(huì)被參數(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對(duì)象轉(zhuǎn)化為數(shù)組對(duì)象

arguments = [].slice.call(arguments)

arguments = Array.from(arguments)

待補(bǔ)充(暫時(shí)沒(méi)想到其余簡(jiǎn)潔的寫(xiě)法.)

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

最常見(jiàn)的一個(gè)例子
階乘

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

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

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種情況,會(huì)給我們?cè)谑褂脮r(shí)稍不注意,不去區(qū)分,就會(huì)犯錯(cuò)。
不過(guò)還好,我們可以通過(guò)ES 5use strict特性進(jìn)行統(tǒng)一.

//對(duì)應(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)
//對(duì)應(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)樵趪?yán)格模式下,arguments對(duì)象被禁止為函數(shù)參數(shù)創(chuàng)建gettersetter方法。

8. 使用...Rest代替

...Rest只能被定義在函數(shù)參數(shù)的最后一個(gè)位置,傳進(jìn)函數(shù)的多余參數(shù)都將傳進(jìn)這個(gè)數(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é)束語(yǔ)
歡迎指正錯(cuò)誤和提出更多的關(guān)于`arguments`的內(nèi)容~

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/86849.html

相關(guān)文章

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

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

    tomener 評(píng)論0 收藏0
  • koa-router 源碼淺析

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

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

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

    doodlewind 評(píng)論0 收藏0
  • redux淺析

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

    galois 評(píng)論0 收藏0
  • 淺析ajax

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

    objc94 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<