- 最近在看一些框架源代碼的時候看見好多都在代碼開頭用了“use strict”,自己不是很了解,就查閱相關資料學習了一下,做了一下筆記。
-
嚴格模式就是讓javascript在更嚴格的條件下運行。
-
其目的有以下幾個:
1. 消除javascript語法的不嚴謹和一些不合理之處,減少一些怪異行為。 2. 消除代碼運行的不安全之處,保證代碼的運行安全。 3. 提高編譯器的效率,增加編譯速度。 4. 為未來新版本的javascript做好鋪墊。
-
同樣的代碼在嚴格模式下可能會有不一樣的運行結果,一些在正常模式下可以運行的代碼語句,在嚴格模式下可能將不能運行,掌握這些內容將有助于更細致深入的了解javascript,提升代碼水平。
-
進入標志就是 "use strict";老版本那些不支持的瀏覽器會把他當做一串普通的字符串處理。
-
有兩種調用方法:
1. 針對整個腳本文件,放在腳本文件的第一行。 2. 針對單個函數,將"use strict"放在函數體的第一行,則整個函數以“嚴格模式”運行。 3. 由于第一種方法不利于文件合并,所以更好的做法是借用第二種方法,將整個腳本文件放在一個立即執行的匿名函數當中。
(function () { "use strict"; // some code here })
-
嚴格模式對javascript的語法和行為都做了一些改變:
1. 全局變量要顯示的聲明,否則會報錯;必須先聲明變量然后再使用。 2. 靜態綁定: a):禁止使用with語句 b):正常模式下javascript語言有兩種作用域(scope),即全局作用域和函數作用域。嚴格模式創建了第三種作用域,eval作用域。正常模式下,eval語句的作用域取決于它本身是處在全局作用域還是函數作用域。嚴格模式下eval本身就是一個作用域,不在能夠生成全局變量了,他所生成的變量只能用于自身內部。
-
增強的安全措施:
1. 禁止this關鍵字指向全局對象。 2. 禁止在函數內部遍歷調用棧。 ``` function f1(){ " use strict"; f1.caller; //報錯 f1.arguments; //報錯 } ```
-
禁止刪除變量:嚴格模式下將不能刪除變量,只有configurable設置為true的才能刪除。
-
顯式報錯
-
重名錯誤:
1. 對象不能有重名的屬性 2. 函數不能有重名的函數
-
禁止八進制表示法
-
arguments的限制:
1.不允許對arguments進行賦值。 2. 不再追蹤參數的變化。 3. 禁止使用arguments.callee,無法在匿名函數內部調用自身了
-
函數必須聲明在頂層
-
增加了一些保留字,用這些保留字命名變量將會報錯
es5嚴格模式(“use strict”)學習筆記
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
推薦閱讀更多精彩內容
- 一、概述 除了正常運行模式,ECMAscript 5添加了第二種運行模式:"嚴格模式"(strict mode)。...
- 一、概述 除了正常運行模式,ECMAscript 5添加了第二種運行模式:"嚴格模式"(strict mode)。...
- 嚴格模式 1、設立嚴格模式的目的 消除JavaScript語法的一些不合理、不嚴謹之處,減少一些怪異行為;(會將J...