JavaScript:严格模式和匿名函数

11
几乎所有我的JS文件都包含在匿名函数中。如果我在匿名函数外部包含"use strict";,那么严格模式是否仍然适用于匿名函数?
例如,下面的脚本中匿名函数内部的代码是否应用了严格模式:
"use strict";

(function() {
    // Is this code running under strict mode?
})(); 
1个回答

9
根据John Resig的文章,如果在文件顶部启用严格模式,则适用于整个文件/脚本。因此,是的,这意味着它将适用于匿名函数内部。
您还可以在函数内添加它,在这种情况下,它仅适用于该特定函数。
编辑后添加:这里是完整规范。一个相关段落:

10.1.1 严格模式代码

ECMAScript程序的语法单元可以使用无限制或严格模式的语法和语义进行处理。在使用严格模式时,ECMAScript代码分为三种类型:严格全局代码、严格eval代码和严格函数代码。以下情况下将代码解释为严格模式代码:

  • 如果全局代码以包含“Use Strict”指令(参见14.1)的指令前言开头,则该全局代码是严格全局代码。
  • 如果eval代码以包含“Use Strict”指令的指令前言开头,或者调用eval的是直接调用(参见15.1.2.1.1)位于严格模式代码中的eval函数,则该eval代码是严格eval代码。
  • 如果函数代码是FunctionDeclaration、FunctionExpression或访问器PropertyAssignment的一部分,并且其FunctionDeclaration、FunctionExpression或PropertyAssignment位于严格模式代码中,或者函数代码以包含“Use Strict”指令的指令前言开头,则该函数代码是严格函数代码。
  • 如果作为内置Function构造函数的最后一个参数提供的函数代码是以包含“Use Strict”指令的指令前言开头的字符串,则该函数代码是严格函数代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接