ES5之嚴格模式

2021-08-28 04:20:51 字數 1410 閱讀 6556

除了正常執行模式(混雜模式),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 在全域...