從es5開始,函式內部就可以設定為嚴格模式。
function
(x,y)
es6將其做了一些規定,只要函式引數使用了預設值,解構賦值,擴充套件運算子,那麼函式內部就不能顯式設定嚴格模式了,否則會報錯。
function
dosomething
(a, b = a)
const
dosomething
=function()
;const
dosomething=(
...a)
=>
;const obj =)}
;//上面幾種寫法都會報錯:uncaught syntaxerror: illegal 'use strict' directive in function with non-****** parameter list
es6這樣規定的原因是,函式內部的嚴格模式,同時適用於函式體和函式引數。但是,函式執行的時候,先執行函式引數,然後再執行函式體。這樣就有乙個不合理的地方,只有從函式體之中,才能知道引數是否應該以嚴格模式執行,但是引數卻應該先於函式體執行。
解決辦法:
設定全域性性的嚴格模式
把函式包在乙個無引數的立即執行函式裡面
// 第一種設定全域性性的嚴格模式
'use strict'
;function
dosomething
(a, b = a)
// 第二種把函式包在乙個無引數的立即執行函式裡面
const dosomething =
(function()
;}()
);
ES6 嚴格模式
es6 的模組自動採用嚴格模式,不管你有沒有在模組頭部加上 use strict 嚴格模式主要有以下限制。1.塊級函式 use strict if true 語法錯誤 es5中嚴格模式下禁止宣告塊級函式,而在es6的嚴格模式中可以宣告塊級函式,並可以在塊級作用 use strict var b tr...
ES6系列 ES6簡介
2015年6月17日,ecmascript的第六個版本正式發布,該版本正式名稱為ecmascript 2015,但通常被稱為ecmascript 6或者es6。瀏覽器對es6的支援情況 es6主要應用於node.js,如果想用在瀏覽器中,就需要使用轉碼器 將es6 轉成es5 這意味著,可以用es6...
ES6系列 詳解ES6中的Map
map類似於物件,都用於儲存key value結構的資料。但是,在傳統的物件上,只能用字串或者symbol來作為鍵名。然而,map與物件最大的差別就在於它可以各種資料型別作為鍵名。map是乙個建構函式,用於例項化例項。const m newmap const o m.set o,content m....