摘要:不過(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等
var foo = function () { console.log(arguments.length) } foo() // 0 foo(1, 2) // 22. 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ò).
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 5的use 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)建getter和setter方法。
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
摘要:響應(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í)際要借助...
摘要:代碼結(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...
摘要:我們打開(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ǔ),比較容易讀了,大體邏輯...
摘要:概念是一個(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方式才可以,返回的是一...
摘要:如果響應(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...
閱讀 1961·2021-11-23 09:51
閱讀 873·2021-11-19 09:40
閱讀 830·2021-10-27 14:20
閱讀 5004·2021-10-09 09:52
閱讀 3297·2021-10-09 09:44
閱讀 1729·2021-10-08 10:05
閱讀 5054·2021-09-09 11:47
閱讀 3481·2019-08-30 12:47