es6函式之嚴格模式用法例項分析
本文例項講述了es6函式之嚴格模式用法。分享給大家供大家參考,具體如下:
從es5開始,函式內部可以設定為嚴格模式。
function doSomething(a,b) { 'use strict' // code }
es2016做了一點修改,規定只要函式引數使用了預設值,解構賦值,或者擴充套件運算子,那麼函式內部就不能顯示設定為嚴格模式,否則會報錯。
// 報錯 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 } }
這樣規定的原因是,函式內部的嚴格模式,同時適用於函式體和函式引數。但是,函式執行的時候,先執行函式引數,然後再執行函式體,這樣就有一個不合理的地方,只有從函式體之中,才能知道引數是否應該以嚴格模式執行,但是引數卻應該先於函式體執行。
function doSomething(value = 070) { 'use strict' return value }
上面程式碼中,引數value的預設值是八進位制數070,但是嚴格模式下不能用字首0表示八進位制,所以應該報錯,但是實際上,javascript引擎會先成功執行value = 070,然後進入函式內部,發現需要用嚴格模式執行,這時才會報錯。
雖然可以先解析函式體程式碼,再執行引數程式碼,但是這樣無疑就增加了複雜性。因此,標準索性禁止了這種用法,只要引數使用了預設值,解構賦值,或者擴充套件運算子,就不能顯示指定嚴格模式。
兩種方法可以規避這種限制。第一種是設定全域性性的嚴格模式,這是合法的。
'use strict' function doSomething(a,b = a) { // code }
第二種是把函式包在一個無引數的立即執行函式裡面。
const doSomething = (function() { 'use strict' return function (value = 42) { return value } })
感興趣的朋友可以使用線上HTML/CSS/JavaScript程式碼執行工具:http://tools.jb51.net/code/HtmlJsRun測試上述程式碼執行效果。
更多關於JavaScript相關內容可檢視本站專題:《JavaScript常用函式技巧彙總》、《javascript面向物件入門教程》、《JavaScript錯誤與除錯技巧總結》、《JavaScript資料結構與演算法技巧總結》及《JavaScript數學運算用法總結》
希望本文所述對大家JavaScript程式設計有所幫助。