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