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构造函数的最后一个参数提供的函数代码是严格函数代码。