Strict モードは、通常はエラーとはせず見逃していたプログラミング上の省略をエラーにするなど、より厳格に振る舞うモードです。
Strict モードは、ECMAScript 2009 = ES5 で導入されました初見: https://www.ecma-international.org/wp-content/uploads/ECMA-262_5th_edition_december_2009.pdf#page=61 10.1.1 Strict Mode Code、現行: https://262.ecma-international.org/#sec-strict-mode-of-ecmascript C The Strict Mode of ECMAScript。
Strict モードはスクリプト全体あるいは、個別の関数に適用できます（var 宣言された変数のスコープと似ていますね）。
スクリプト全体をStrict モードにする場合
'use strict';
var msg = "Hello strict world!";
console.log(msg);
この例では怪しい兆候がないので、Hello strict world! が表示されました。
'use strict';
msg = "Hello strict world!";
console.log(msg);
1箇所変更しました。
実行すると、ReferenceError: msg is not defined となります。
を省略したので、（初期化を伴う）変数宣言から代入になり「define している場所がない」状況がエラーになっています。
 をとってみます。
msg = "Hello strict world!";
console.log(msg);
Hello strict world! が表示されました。
関数単位でStrict モードにする場合
console.log(0)
function nostrict() {
  msg = "Hello nostrict function!";
  console.log(msg + 0177);
}
console.log(1)
function strict() {
  'use strict';
  msg = "Hello strict function!";
  console.log(msg + 0177);
}
console.log(2)
// SyntaxError: Octal literals are not allowed in strict mode.
console.log() による表示は全く行われないでエラーで止まります。
0に[0-7]が続く書式の八進数表現はstrictモードではエラーです。
ES6で導入されたクラス（class）の定義の中では、自動的にstrict モードになります。