厳格モードとは
strictは直訳すると「厳格、厳しい」の意味。
結論から言うと、これはこのJavaScriptの関数内を厳格モードとして扱う、という意味とのこと。
ここで言う厳格モードとは、より的確なエラーチェックが行われるモードのことで、これまでエラーにならなかったような、曖昧な書き方をされていたものも、きっちりエラーとしてチェックしてくれたりするものだそうです。
曖昧な書き方でも、実行できているなら良いじゃん…
なんて思われるかもですが、そういったコードは後々修正追加をしていくと、出どころ不明のエラーとなってしまったりするので、なるべくキッチリかけてるに越したことはありません。
宣言されていない変数への代入
以前書いた通り、宣言されていない変数はグローバル扱いされるが、これを厳格モードで実行すると…
非厳格モード
const a = 1;
b = 2;
console.log(a); // => 1
console.log(b); // => 2
厳格モード
'use strict';
const a = 1;
b = 2;
console.log(a);
console.log(b);
// => Uncaught ReferenceError: b is not defined at window.onload
厳格モードでは、しっかりエラーとしてキャッチしてくれている。
さらに…
出力しなくてもエラー
'use strict';
const a = 1;
b = 2;
console.log(a);
// => Uncaught ReferenceError: b is not defined at window.onload
console.logで、bを出力しなくてもエラーが出る。
つまり、代入した時点でエラーとして検知している様子。