嚴(yán)格模式通過更嚴(yán)格的語法檢查提升代碼質(zhì)量與安全性。啟用后,一、不允許隱式創(chuàng)建全局變量,如未聲明變量直接賦值會(huì)報(bào)錯(cuò);二、禁止重復(fù)的函數(shù)參數(shù)名或對象屬性名,減少歧義;三、限制this指向,未明確指定時(shí)為undefined而非全局對象;四、禁用不安全語法如with語句。開啟方式是在腳本或函數(shù)頂部添加’use strict’; 可全局或局部啟用。注意必須置于頂部,拼寫正確且非嵌套于非嚴(yán)格模式中。主流瀏覽器已廣泛支持,推薦使用以提前發(fā)現(xiàn)潛在問題。
嚴(yán)格模式(Strict Mode)是 JavaScript 提供的一種運(yùn)行模式,它能讓代碼在更嚴(yán)格的語法規(guī)則下執(zhí)行,幫助開發(fā)者避免一些常見的錯(cuò)誤和不規(guī)范的寫法。啟用嚴(yán)格模式后,JavaScript 引擎會(huì)采用更嚴(yán)謹(jǐn)?shù)姆绞絹斫馕龊蛨?zhí)行代碼。
一、嚴(yán)格模式有什么用?
開啟嚴(yán)格模式之后,有幾個(gè)明顯的變化:
- 不允許隱式創(chuàng)建全局變量:比如忘記寫 var、let 或 const 就直接賦值,會(huì)報(bào)錯(cuò)而不是默默創(chuàng)建全局變量。
- 禁止重復(fù)的函數(shù)參數(shù)名或?qū)ο髮傩悦?/strong>(某些情況):這能減少歧義。
- 限制 this 的指向:在非嚴(yán)格模式下,函數(shù)中的 this 如果沒有明確指定,會(huì)默認(rèn)指向全局對象(如瀏覽器中的 window),而嚴(yán)格模式中會(huì)保持為 undefined。
- 禁用一些不安全或被廢棄的語法:例如 with 語句會(huì)被禁用。
這些變化讓代碼更清晰、更健壯,也更容易優(yōu)化。
二、怎么開啟嚴(yán)格模式?
開啟方式很簡單,只需要在代碼頂部或函數(shù)頂部加上一行字符串 ‘use strict’; 即可。
全局開啟
如果你希望整個(gè)腳本都使用嚴(yán)格模式,在腳本文件或 <script> 標(biāo)簽的第一行加上:</script>
'use strict';
例如:
'use strict'; function demo() { x = 10; // 這里會(huì)報(bào)錯(cuò),因?yàn)闆]有聲明x } demo();
局部開啟(只在某個(gè)函數(shù)中)
也可以只為某個(gè)函數(shù)啟用嚴(yán)格模式,這樣不影響其他代碼:
function demo() { 'use strict'; x = 10; // 報(bào)錯(cuò):x is not defined }
這種方式適合逐步遷移舊代碼到嚴(yán)格模式。
三、需要注意的地方
- ‘use strict’ 必須出現(xiàn)在腳本或函數(shù)體的最前面,否則不會(huì)生效。
- 不要加多余的空格或拼寫錯(cuò)誤,比如寫成 ‘use_strict’ 或 ‘use stricts’ 都沒用。
- 嚴(yán)格模式不能嵌套在非嚴(yán)格模式的函數(shù)中完全生效。比如一個(gè)函數(shù)開啟了嚴(yán)格模式,它的內(nèi)部函數(shù)也會(huì)繼承這個(gè)模式。
- 某些瀏覽器可能對嚴(yán)格模式支持有差異,但現(xiàn)代主流瀏覽器基本都支持了。
基本上就這些。開啟嚴(yán)格模式是個(gè)好習(xí)慣,雖然看起來只是加了一行代碼,但它能在早期幫你發(fā)現(xiàn)很多潛在問題。