【问题标题】:JavaScript: Strict mode and anonymous functionsJavaScript:严格模式和匿名函数
【发布时间】:2011-08-26 15:05:20
【问题描述】:
几乎我所有的 JS 文件都包装在匿名函数中。如果我在匿名函数之外包含"use strict";,那么严格模式是否仍然适用于匿名函数?
例如,下面脚本中的匿名函数的内部体是否应用了严格模式:
"use strict";
(function() {
// Is this code running under strict mode?
})();
【问题讨论】:
标签:
javascript
strict
ecmascript-5
【解决方案1】:
根据John Resig's article,如果您在文件顶部打开严格模式,它将适用于整个文件/脚本。所以是的,这意味着它将适用于匿名函数。
您也可以在函数中添加它,在这种情况下,它仅适用于该特定函数。
编辑添加:这里是the full specification。一个相关段落:
10.1.1 严格模式代码
可以使用不受限制或严格模式的语法和语义来处理 ECMAScript 程序语法单元。当使用严格模式处理时,三种类型的 ECMAScript 代码被称为严格全局代码、严格 eval 代码和严格函数代码。代码在以下情况下被解释为严格模式代码:
- 如果全局代码以包含使用严格指令的指令序言开头(参见 14.1),则它是严格的全局代码。
- 如果 Eval 代码以包含 Use Strict 指令的指令序言开头,或者如果对 eval 的调用是对包含在严格模式下的 eval 函数的直接调用(参见 15.1.2.1.1),则它是严格的 eval 代码代码。
- 如果 FunctionDeclaration、FunctionExpression 或 PropertyAssignment 包含在严格模式代码中,或者如果函数代码以包含 Use Strict 的 Directive Prologue 开头,则作为 FunctionDeclaration、FunctionExpression 或访问器 PropertyAssignment 一部分的函数代码是严格函数代码指示。
- 如果最后一个参数是一个字符串,作为 FunctionBody 处理时以包含使用严格指令的指令序言开头,则作为内置函数构造函数的最后一个参数提供的函数代码是严格函数代码。李>