es5的嚴格模式是採用具備限制性JavaScript變體的一種方式,從而使代碼顯示地脫離‘懶散模式/非嚴格模式’javascript
嚴格模式經過拋出錯誤來消除一些原有靜默錯誤java
嚴格模式修復了一些致使JavaScript引擎難以優化的缺陷:有時候,相同的代碼,嚴格模式能夠比非嚴格模式下運行得更快。瀏覽器
嚴格模式禁用了在ECMAScript將來版本中可能會定義的一些語法。安全
在整個腳本文件或者函數體開頭,寫入'use strict'
語句。ecmascript
沒法再意外建立全局變量,會拋出錯誤。ReferenceError.: *** is not defined
ide
引發靜默失敗的賦值操做拋出異常。 TypeError: ...
函數
試圖刪除不可刪除的屬性時會拋出異常。TypeError: ...
優化
要求函數的參數名惟一。SyntaxError: Duplicate parameter name not allowed in this context
this
禁止八進制數字語法。SyntaxError: Octal literals are not allowed in strict mode.
es5
禁止設置原始類型值的屬性。TypeError: ...
禁用with
eval
再也不爲上層範圍引入新變量。
在嚴格模式下eval
僅僅爲被運行的代碼建立變量。因此eval
不會使得名稱映射到外部變量或者其餘局部變量。
禁止刪除聲明變量。delete name
在嚴格模式下會引發語法錯誤。SyntaxError: Delete of an unqualified identifier in strict mode.
eval
和arguments
變的簡單eval
和arguments
不能經過程序語法被綁定賦值。
參數的值不會隨arguments
對象的值的改變而變化。
再也不支持argument.callee
經過this
傳遞給一個函數的值不會被強制轉換爲一個對象。
不再能經過普遍實現的ECMAScript擴展「遊走於」JavaScript的棧中。
函數的參數不在提供對相應函數調用變量的訪問。
保留了一部分字符做爲關鍵字。好比implements
,interface
,let
,package
,private
,protected
,public
,static
和yield
禁止了不在腳本或者函數層面上的函數聲明
主流瀏覽器如今實現了嚴格模式。可是也有大量瀏覽器只支持部分嚴格模式或者根本就不支持,因此不要盲目依賴嚴格模式。