標籤:eva tps evel mod duplicate developer 代碼 *** 通過
前言
es5的strict 模式是採用具有限制性JavaScript變體的一種方式,從而使代碼顯示地脫離‘懶散模式/非strict 模式’
strict 模式
strict 模式通過拋出錯誤來消除一些原有靜默錯誤
strict 模式修複了一些導致JavaScript引擎難以最佳化的缺陷:有時候,相同的代碼,strict 模式可以比非strict 模式下運行得更快。
strict 模式禁用了在ECMAScript未來版本中可能會定義的一些文法。
開啟strict 模式
在整個指令檔或者函數體開頭,寫入‘use strict‘
語句。
將拼字錯誤轉成異常
無法再意外建立全域變數,會拋出錯誤。ReferenceError.: *** is not defined
引起靜默失敗的賦值操作拋出異常。 TypeError: ...
試圖刪除不可刪除的屬性時會拋出異常。TypeError: ...
要求函數的參數名唯一。SyntaxError: Duplicate parameter name not allowed in this context
禁止八位元字文法。SyntaxError: Octal literals are not allowed in strict mode.
禁止設定原始類型值的屬性。TypeError: ...
簡化變數的使用
禁用with
eval
不再為上層範圍引入新變數。
在strict 模式下eval
僅僅為被啟動並執行代碼建立變數。所以eval
不會使得名稱映射到外部變數或者其他局部變數。
禁止刪除聲明變數。delete name
在strict 模式下會引起語法錯誤。SyntaxError: Delete of an unqualified identifier in strict mode.
讓
eval
和
arguments
變的簡單
eval
和arguments
不能通過程式文法被綁定賦值。
參數的值不會隨arguments
對象的值的改變而變化。
不再支援argument.callee
“安全的”JavaScript
通過this
傳遞給一個函數的值不會被強制轉換為一個對象。
再也不能通過廣泛實現的ECMAScript擴充“遊走於”JavaScript的棧中。
函數的參數不在提供對相應函數調用變數的訪問。
為未來的ECMAScript版本鋪平道路
保留了一部分字元作為關鍵字。比如implements
,interface
,let
,package
,private
,protected
,public
,static
和yield
禁止了不在指令碼或者函數層面上的函式宣告
瀏覽器的strict 模式
主流瀏覽器現在實現了strict 模式。但是也有大量瀏覽器只支援部分strict 模式或者根本就不支援,所以不要盲目依賴strict 模式。
參考MDN
js中的strict 模式和非strict 模式的比較