es6函數(shù)之嚴(yán)格模式用法實(shí)例分析
本文實(shí)例講述了es6函數(shù)之嚴(yán)格模式用法。分享給大家供大家參考,具體如下:
從es5開(kāi)始,函數(shù)內(nèi)部可以設(shè)定為嚴(yán)格模式。
function doSomething(a, b) {
'use strict'
// code
}
es2016做了一點(diǎn)修改,規(guī)定只要函數(shù)參數(shù)使用了默認(rèn)值,解構(gòu)賦值,或者擴(kuò)展運(yùn)算符,那么函數(shù)內(nèi)部就不能顯示設(shè)定為嚴(yán)格模式,否則會(huì)報(bào)錯(cuò)。
// 報(bào)錯(cuò)
function doSomething(a, b = a) {
'use strict'
// code
}
const doSomething = function({a, b}) {
'use strict'
// code
}
const doSomething = (...a) => {
'use strict'
// code
}
const obj = {
doSomething({a, b}) {
'use strict'
// code
}
}
這樣規(guī)定的原因是,函數(shù)內(nèi)部的嚴(yán)格模式,同時(shí)適用于函數(shù)體和函數(shù)參數(shù)。但是,函數(shù)執(zhí)行的時(shí)候,先執(zhí)行函數(shù)參數(shù),然后再執(zhí)行函數(shù)體,這樣就有一個(gè)不合理的地方,只有從函數(shù)體之中,才能知道參數(shù)是否應(yīng)該以嚴(yán)格模式執(zhí)行,但是參數(shù)卻應(yīng)該先于函數(shù)體執(zhí)行。
function doSomething(value = 070) {
'use strict'
return value
}
上面代碼中,參數(shù)value的默認(rèn)值是八進(jìn)制數(shù)070,但是嚴(yán)格模式下不能用前綴0表示八進(jìn)制,所以應(yīng)該報(bào)錯(cuò),但是實(shí)際上,javascript引擎會(huì)先成功執(zhí)行value = 070 ,然后進(jìn)入函數(shù)內(nèi)部,發(fā)現(xiàn)需要用嚴(yán)格模式執(zhí)行,這時(shí)才會(huì)報(bào)錯(cuò)。
雖然可以先解析函數(shù)體代碼,再執(zhí)行參數(shù)代碼,但是這樣無(wú)疑就增加了復(fù)雜性。因此,標(biāo)準(zhǔn)索性禁止了這種用法,只要參數(shù)使用了默認(rèn)值,解構(gòu)賦值,或者擴(kuò)展運(yùn)算符,就不能顯示指定嚴(yán)格模式。
兩種方法可以規(guī)避這種限制。第一種是設(shè)定全局性的嚴(yán)格模式,這是合法的。
'use strict'
function doSomething(a, b = a) {
// code
}
第二種是把函數(shù)包在一個(gè)無(wú)參數(shù)的立即執(zhí)行函數(shù)里面。
const doSomething = (function() {
'use strict'
return function (value = 42) {
return value
}
})
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:http://tools.jb51.net/code/HtmlJsRun測(cè)試上述代碼運(yùn)行效果。
更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
- es6數(shù)組的flat(),flatMap()函數(shù)用法實(shí)例分析
- es6函數(shù)中的作用域?qū)嵗治?/a>
- es6函數(shù)之rest參數(shù)用法實(shí)例分析
- ES6學(xué)習(xí)筆記之字符串、數(shù)組、對(duì)象、函數(shù)新增知識(shí)點(diǎn)實(shí)例分析
- ES6知識(shí)點(diǎn)整理之函數(shù)對(duì)象參數(shù)默認(rèn)值及其解構(gòu)應(yīng)用示例
- 關(guān)于ES6箭頭函數(shù)中的this問(wèn)題
- ES6中javascript實(shí)現(xiàn)函數(shù)綁定及類的事件綁定功能詳解
- ES6中Array.find()和findIndex()函數(shù)的用法詳解
- ES6中Array.includes()函數(shù)的用法
- ES6中箭頭函數(shù)的定義與調(diào)用方式詳解
- es6函數(shù)name屬性功能與用法實(shí)例分析
相關(guān)文章
JS中數(shù)組與對(duì)象相互轉(zhuǎn)換的實(shí)現(xiàn)方式
這篇文章主要介紹了JS中數(shù)組與對(duì)象相互轉(zhuǎn)換的實(shí)現(xiàn)方式,文章通過(guò)代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-04-04
js實(shí)現(xiàn)滑動(dòng)進(jìn)度條效果
這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)滑動(dòng)進(jìn)度條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-08-08
JavaScript實(shí)現(xiàn)的簡(jiǎn)單加密解密操作示例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)的簡(jiǎn)單加密解密操作,涉及javascript基于charCodeAt與fromCharCode的字符串編碼與解碼操作相關(guān)使用技巧,需要的朋友可以參考下2018-06-06
SWFUpload多文件上傳及文件個(gè)數(shù)限制的方法
這篇文章主要介紹了SWFUpload多文件上傳及文件個(gè)數(shù)限制的方法,較為詳細(xì)的分析了SWFUpload組件實(shí)現(xiàn)多文件上傳的原理、使用方法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2016-05-05
基于js與flash實(shí)現(xiàn)的網(wǎng)站flv視頻播放插件代碼
這篇文章主要介紹了基于js與flash實(shí)現(xiàn)的網(wǎng)站flv視頻播放插件代碼,該功能在很多網(wǎng)站上都有著廣泛的應(yīng)用,本文以實(shí)例形式對(duì)其進(jìn)行介紹,需要的朋友可以參考下2014-10-10
javascript實(shí)現(xiàn)的時(shí)間格式加8小時(shí)功能示例
這篇文章主要介紹了javascript實(shí)現(xiàn)的時(shí)間格式加8小時(shí)功能,涉及javascript日期時(shí)間轉(zhuǎn)換與運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-06-06
JavaScript返回上一頁(yè)的三種方法及區(qū)別介紹
這篇文章主要介紹了JavaScript返回上一頁(yè)的三種方法及區(qū)別介紹,本文直接給出示例代碼,需要的朋友可以參考下2015-07-07
JS生態(tài)系統(tǒng)加速Tailwind?CSS工作原理探究
這篇文章主要為大家介紹了JS?生態(tài)系統(tǒng)加速Tailwind?CSS使用及工作原理探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01

