2011-05-16 95 views
10

几乎所有的JS文件都包含在匿名函数中。如果我在匿名函数外包含"use strict";,严格模式仍然适用于匿名函数吗?JavaScript:严格模式和匿名函数

例如,在下面的脚本应用于匿名函数内部主体严格模式:

"use strict"; 

(function() { 
    // Is this code running under strict mode? 
})(); 

回答

8

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