第20章厳格モード


この文章のテーマは、ウィキペディアの「モダンなJavaScript Deep Dive」を独学して記録することです.
function f() {
  x = 10;
}
f();

console.log(x);
上のコードの最後の行が何を出力するか考えてみましょう.まず、関数fが実行されると、宣言されていない変数xに10を割り当てることを試みる.JAvascriptはまず関数fの変数scopeでxを検索します.ないので、関数外で再検索します.ただし、xはそれ以外にないため、デフォルトではJavaScriptのグローバルオブジェクトにxというpropertyが作成され、10が割り当てられます.このとき、xをグローバル変数として使用することができ、最後の行は10を出力する.
この現象を黙示戦と呼ぶ.
strict mode
グローバルを黙示するような状況は、エラーの原因になる可能性が高いため、変数を常に宣言して使用する必要があります.
しかし,無名の全域に加えて,細かい誤字や文法の誤りで認識できない誤りが生じる可能性がある.これらのエラーを防止するために、ES 5にstrict modeが追加され、javascript言語構文をより厳密に適用してエラーを引き起こす可能性のあるコードやjavascriptエンジンの最適化操作に問題が発生する可能性のあるコードに明示的なエラーが発生します.
strict modeを使用するには、適用する部分の前に'use strict';を追加します.グローバルに追加されたプリアンブルはスクリプト全体に適用され、関数に追加されたプリアンブルはその関数の下のネストされた関数に適用されます.(中間追加の場合、strict modeは追加前に適用されません)
しかし、本書の著者はscript単位または関数単位のstrictmodeを使用することを避けることを提案し、使用する場合は、スクリプト全体をインスタント実行関数として包み、対応するインスタント実行関数の前にstrictmodeを追加するコードを使用することを提案します.(ES 6に追加されたクラスとモジュールは基本的にstrict modeを採用していることに注意してください)
(fuction() {
  'use strict';
  
  //함수내용
}());
厳格なパターンのエラーが発生しました
  • 暗跡戦
  • 変数、関数、およびパラメータを削除する
  • パラメータ名
  • を繰り返す
  • 連絡用
  • strict modeの変化
  • 関数が通常の関数として呼び出されると、関数内のthisは未定義の値をバインドします.
  • パラメータに渡されるパラメータの再割り当ては、パラメータオブジェクトに反映されません.
  • ESLint
    また、本書の著者が推奨するstrict modeはstrict modeよりもESLintなどのLintツールを使用するのに適しており、Lintツールは静的解析機能を通じてソースコードを実行する前にソースコードをスキャンし、文法の誤りだけでなく、潜在的な誤りを見つけ、誤りの原因を特定することができ、非常に有用なツールである.
    印刷ツールは、厳格なモード制限のエラーだけでなく、コンフィギュレーションファイルとして会議を定義および強制的にエンコードできます.