2011-05-16 96 views
10

幾乎所有的JS文件都包含在匿名函數中。如果我在匿名函數外包含"use strict";,嚴格模式仍然適用於匿名函數嗎?JavaScript:嚴格模式和匿名函數

例如,在下面的腳本應用於匿名函數內部主體嚴格模式:

"use strict"; 

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

回答

8

John Resig's article,如果你在文件的頂部打開嚴格模式,它適用到整個文件/腳本。所以是的,這意味着它將適用於匿名函數。

您也可以在一個函數中添加它,在這種情況下它只適用於該特定函數。

編輯補充:這裏是the full specification。一個有關段落:

10.1.1嚴格模式代碼

ECMAScript程序句法單元可以使用任一限制或嚴格模式的語法和語義進行處理。當使用嚴格模式處理時,三種類型的ECMAScript代碼被稱爲嚴格全局代碼,嚴格評估代碼和嚴格功能代碼。在以下情況下,代碼被解釋爲嚴格模式代碼:

  • 如果以包含使用嚴格指令(參見14.1)的指令序言開頭,則全局代碼是嚴格的全局代碼。
  • 如果以包含使用嚴格指令的指令序言開始,或者如果對eval的調用是對嚴格模式中包含的eval函數的直接調用(參見15.1.2.1.1),則評估代碼是嚴格的eval代碼碼。
  • 功能代碼是FunctionDeclaration,FunctionExpression或訪問器的一部分PropertyAssignment是嚴格的函數代碼,如果其FunctionDeclaration,FunctionExpression或PropertyAssignment包含在嚴格模式代碼中,或者功能代碼以包含使用嚴格的指令序言開頭指示。
  • 如果最後一個參數是作爲FunctionBody進行處理的String以包含Use Strict指令的Directive Prologue開頭,則作爲內置Function構造函數的最後一個參數提供的函數代碼是嚴格函數代碼。