11

ほぼすべてのJSファイルが無名関数でラップされています。匿名関数の外部に含める場合"use strict";でも、厳密モードは匿名関数に適用されますか?

たとえば、次のスクリプトの無名関数の内部に厳密モードが適用されています。

"use strict";

(function() {
    // Is this code running under strict mode?
})(); 
4

1 に答える 1

9

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で始まる文字列である場合、厳密な関数コードです。
于 2011-05-16T17:21:59.233 に答える