10
幾乎所有的JS文件都包含在匿名函數中。如果我在匿名函數外包含"use strict";
,嚴格模式仍然適用於匿名函數嗎?JavaScript:嚴格模式和匿名函數
例如,在下面的腳本應用於匿名函數內部主體嚴格模式:
"use strict";
(function() {
// Is this code running under strict mode?
})();
幾乎所有的JS文件都包含在匿名函數中。如果我在匿名函數外包含"use strict";
,嚴格模式仍然適用於匿名函數嗎?JavaScript:嚴格模式和匿名函數
例如,在下面的腳本應用於匿名函數內部主體嚴格模式:
"use strict";
(function() {
// Is this code running under strict mode?
})();
據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構造函數的最後一個參數提供的函數代碼是嚴格函數代碼。