ほぼすべてのJSファイルが無名関数でラップされています。匿名関数の外部に含める場合"use strict";
でも、厳密モードは匿名関数に適用されますか?
たとえば、次のスクリプトの無名関数の内部に厳密モードが適用されています。
"use strict";
(function() {
// Is this code running under strict mode?
})();
ほぼすべてのJSファイルが無名関数でラップされています。匿名関数の外部に含める場合"use strict";
でも、厳密モードは匿名関数に適用されますか?
たとえば、次のスクリプトの無名関数の内部に厳密モードが適用されています。
"use strict";
(function() {
// Is this code running under strict mode?
})();
John Resigの記事によると、ファイルの先頭で厳密モードをオンにすると、ファイル/スクリプト全体に適用されます。そうです、それは無名関数内で適用されることを意味します。
関数内に追加することもできます。その場合、その特定の関数にのみ適用されます。
追加するために編集:これが完全な仕様です。関連する1つの段落:
10.1.1厳密なモードコード
ECMAScriptプログラムの構文単位は、無制限または厳密モードの構文とセマンティクスのいずれかを使用して処理できます。strictモードを使用して処理される場合、3種類のECMAScriptコードは、strictグローバルコード、strict evalコード、およびstrict関数コードと呼ばれます。次の状況では、コードは厳密モードコードとして解釈されます。
- グローバルコードは、Use Strict Directiveを含むディレクティブプロローグで始まる場合、厳密なグローバルコードです(14.1を参照)。
- Evalコードは、Use Strict Directiveを含むディレクティブプロローグで始まる場合、またはevalの呼び出しがstrictモードコードに含まれるeval関数への直接呼び出し(15.1.2.1.1を参照)である場合、strictevalコードです。
- FunctionDeclaration、FunctionExpression、またはアクセサーPropertyAssignmentの一部である関数コードは、そのFunctionDeclaration、FunctionExpression、またはPropertyAssignmentが厳密モードコードに含まれている場合、または関数コードがUse Strictディレクティブを含むディレクティブプロローグで始まる場合、厳密関数コードです。
- 組み込み関数コンストラクターの最後の引数として提供される関数コードは、最後の引数が、FunctionBodyとして処理されるときに、Use StrictDirectiveを含むDirectivePrologueで始まる文字列である場合、厳密な関数コードです。