2011-05-16 25 views
10

Casi todos mis archivos JS están envueltos en funciones anónimas. Si incluyo "use strict"; fuera de la función anónima, ¿todavía se aplica el modo estricto a la función anónima?JavaScript: modo estricto y funciones anónimas

Por ejemplo, es el modo estricto se aplica al cuerpo interno de la función anónima en el guión a continuación:

"use strict"; 

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

Respuesta

8

Según John Resig's article, si activa el modo estricto en la parte superior del archivo, se aplica a todo el archivo/script. Entonces sí, eso implica que se aplicaría dentro de la función anónima.

También puede agregarlo dentro de una función, en cuyo caso solo se aplica a esa función específica.

Editado para agregar: aquí está the full specification. Uno de los párrafos pertinentes:

10.1.1 Código Modo estricto

Una unidad sintáctica Programa ECMAScript puede ser procesada usando la sintaxis y la semántica modo no restringido o estricta. Cuando se procesa usando el modo estricto, los tres tipos de código ECMAScript se denominan código global estricto, código eval estricto y código de función estricta. El código se interpreta como código de modo estricto en las siguientes situaciones:

  • El código global es un código global estricto si comienza con un Prólogo de directiva que contiene una directiva de uso estricto (consulte 14.1).
  • El código de evaluación es un código de evaluación estricto si comienza con un Prólogo de directiva que contiene una directiva de uso estricto o si la llamada a eval es una llamada directa (ver 15.1.2.1.1) a la función de evaluación contenida en modo estricto código.
  • El código de función que forma parte de FunctionDeclaration, FunctionExpression o accessor PropertyAssignment es un código de función estricta si su FunctionDeclaration, FunctionExpression o PropertyAssignment está contenida en código de modo estricto o si el código de función comienza con un Prólogo de directiva que contiene un uso estricto Directiva.
  • El código de función que se proporciona como último argumento para el constructor de funciones incorporado es un código de función estricta si el último argumento es una cadena que cuando se procesa como un cuerpo de función comienza con un directivo que contiene una directiva de uso estricto.
Cuestiones relacionadas