几乎所有的JS文件都包含在匿名函数中。如果我在匿名函数之外包含"use strict";
,那么严格模式是否仍适用于匿名函数?
例如,严格模式应用于下面脚本中匿名函数的内部体:
"use strict";
(function() {
// Is this code running under strict mode?
})();
答案 0 :(得分:8)
根据John Resig's article,如果您在文件顶部打开严格模式,它将应用于整个文件/脚本。所以是的,这意味着它将在匿名函数中应用。
您也可以在函数中添加它,在这种情况下它只适用于该特定函数。
编辑添加:此处为the full specification。一个相关段落:
10.1.1严格模式代码
可以使用无限制或严格模式语法和语义来处理ECMAScript程序语法单元。当使用严格模式处理时,三种类型的ECMAScript代码被称为严格全局代码,严格eval代码和严格功能代码。在以下情况下,代码被解释为严格模式代码:
- 全局代码是严格的全局代码,如果它以包含Use Strict Directive的指令序言开头(见14.1)。
- 如果Eval代码以包含Use Strict Directive的Directive Prologue开头,或者对eval的调用是对严格模式中包含的eval函数的直接调用(参见15.1.2.1.1),则Eval代码是严格的eval代码码。
- 作为FunctionDeclaration,FunctionExpression或访问者PropertyAssignment的一部分的函数代码是严格的函数代码,如果其FunctionDeclaration,FunctionExpression或PropertyAssignment包含在严格模式代码中,或者函数代码以包含Use Strict的Directive Prologue开头指示。
- 作为内置Function构造函数的最后一个参数提供的函数代码是严格函数代码,如果最后一个参数是一个String,当作为FunctionBody处理时,它开始于包含Use Strict指令的Directive Prologue。