JavaScript:严格模式和匿名函数

时间:2011-05-16 17:17:02

标签: javascript strict ecmascript-5

几乎所有的JS文件都包含在匿名函数中。如果我在匿名函数之外包含"use strict";,那么严格模式是否仍适用于匿名函数?

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

"use strict";

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

1 个答案:

答案 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。
  •