除了正常執行模式(混雜模式),es5新增了第二種執行模式:「嚴格模式」(strict mode),顧名思義這種模式使得js在更嚴格的語法條件下執行。
目的/作用:消除js語法的一些不合理,不嚴謹之處,減少一些怪異行為,消除**執行的一些不安全之處,為**的安全執行保駕護航,為未來新版本的js做好鋪墊
使用:在全域性或函式的第一條語句定義為:『use strict』;如果瀏覽器不支援,只解析為一條簡單的語句,沒有任何***
語法和行為改變
1.必須使用var宣告變數
使用嚴格模式下:
username變紅了,
控制台報錯。不用var 的話瀏覽器就以為你這個行為是無效的,我們把var 加上:
控制台也不報錯了,正確輸出。
2.禁止自定義的函式中的this指向window
在使用嚴格模式下,自呼叫的this會指向window,控制台就要報錯
想要不報錯就必須:
一旦new的話this就指向例項化物件
3.建立eval作用域
執行會彈出『nba』;
在不使用嚴格模式下:
兩次彈出都是abc;這樣的話就有問題,有一定的安全隱患。有可能eval裡是接收別人發來的請求,如果有人要攻擊你,就很有可能攔截發來的請求,再換上自己的請求,導致你的專案崩潰。
第一次輸出abc,第二次輸出nba;發現eval有自己的作用域了,並沒有汙染全域性環境。eval作用域和函式作用域是一樣的,內部的資料都是私有的。所以eval很不安全,它不管接收的是什麼,都去執行。
4.物件不能有重名的屬性
在嚴格模式下這樣寫就會出現紅色波紋。
ES5 嚴格模式
在es5中可以開啟一種嚴格模式的 形式,開啟方式是 將全域性或者函式的第一條語句定義為 use strict 如果瀏覽器不支援,會將其解析為一條普通語句,沒有任何的 開啟全域性模式後會有一下的一些約束 1.第一次定義變數的時候必須使用var。如 test heihei alert test 該語句在...
es5嚴格模式
es3和es5產生衝突的部分使用es5的方法,否則使用es3 use strict 變數賦值前必須宣告,var a b 2 b沒有定義 區域性this必須被賦值 賦給什麼就是什麼 拒絕重複屬性和引數 arguments.calle 不能被使用 function.caller with 改變作用域鏈 ...
ES5 嚴格模式
歷史 es5 2009年發布 es6 es2015 es7 es2016 在早期規範確立之前js在瀏覽器中執行時,每個瀏覽器都有定義一套自己的套路,這個被稱為混炸模式,或者怪異模式 隨著ecma js 等確立新的規範 故名思意 這種模式使用js在更嚴格的語法條件下執行,為 的執行保駕護航 1 在全域...