很長一段時間以來,JavaScript 在沒有相容性問題的情況下不斷演進。新的功能會新增到語言中,而舊有的功能則不會改變。
這帶來的好處是不會中斷現有的程式碼。但缺點是 JavaScript 創造者所犯的任何錯誤或不完美的決策,將永遠停留在語言中。
這種情況一直持續到 2009 年 ECMAScript 5 (ES5) 出現。它為語言新增了新功能,並修改了一些現有功能。為了讓舊程式碼繼續運作,大多數此類修改在預設情況下都是關閉的。你需要使用特殊指令明確啟用它們:"use strict"
。
“嚴格使用”
此指令看起來像字串:"use strict"
或 'use strict'
。當它位於腳本的最上方時,整個腳本會以「現代」的方式執行。
例如
"use strict";
// this code works the modern way
...
很快地,我們將會學習函式(一種將指令分組的方式),因此讓我們事先注意,"use strict"
可以放在函式的開頭。這樣做會僅在該函式中啟用嚴格模式。但通常人們會將它用於整個腳本。
請務必確認 "use strict"
位於腳本的最上方,否則嚴格模式可能無法啟用。
在此處未啟用嚴格模式
alert("some code");
// "use strict" below is ignored--it must be at the top
"use strict";
// strict mode is not activated
只有註解可以出現在 "use strict"
上方。
use strict
沒有像 "no use strict"
這樣的指令可以將引擎還原為舊行為。
一旦我們進入嚴格模式,就無法回頭了。
瀏覽器主控台
當您使用 開發人員主控台 執行程式碼時,請注意它預設不會 use strict
。
有時,當 use strict
有所不同時,您會得到不正確的結果。
那麼,如何在主控台中實際 use strict
呢?
首先,您可以嘗試按 Shift+Enter 輸入多行,並將 use strict
放在最上方,如下所示
'use strict'; <Shift+Enter for a newline>
// ...your code
<Enter to run>
它可以在大多數瀏覽器中使用,例如 Firefox 和 Chrome。
如果不行,例如在舊瀏覽器中,有一個難看但可靠的方法可以確保 use strict
。將它放在這種包裝函式內
(function() {
'use strict';
// ...your code here...
})()
我們應該「嚴格使用」嗎?
這個問題聽起來很明顯,但並非如此。
有人建議以 "use strict"
開始腳本… 但你知道什麼很酷嗎?
現代 JavaScript 支援「類別」和「模組」——進階語言結構(我們一定會接觸到它們),它們會自動啟用 use strict
。因此,如果我們使用它們,就不需要新增 "use strict"
指令。
因此,目前 "use strict";
是腳本開頭受歡迎的訪客。稍後,當你的程式碼都放在類別和模組中時,你可以省略它。
目前,我們必須大致了解 use strict
。
在接下來的章節中,當我們學習語言功能時,我們將看到嚴格模式和舊模式之間的差異。幸運的是,差異並不多,而且它們實際上讓我們的程式碼更佳。
除非另有說明(極少見),本教學課程中的所有範例都假設為嚴格模式。
註解
<code>
標籤,若要插入多行,請將它們包覆在<pre>
標籤中,若要插入 10 行以上,請使用沙盒 (plnkr、jsbin、codepen…)