w3schools support international ecmascript javascript ecma

support - ¿Cuándo NO usar el "modo estricto" en javascript?



ecmascript w3schools (4)

He encontrado esta publicación: ¿Qué hace "uso estricto" en JavaScript, y cuál es el razonamiento detrás de esto?

Y lo que entiendo aquí es que debería use strict siempre .

Pero me pregunto, si fuera cierto, que siempre es mejor usar "modo estricto", entonces ni siquiera existiría, porque sería un comportamiento predeterminado.

Así que busqué la definición de la 6ª edición de ECMAScript y encontré que es la predeterminada para muchos casos.

De acuerdo con la documentación oficial sobre el modo estricto.

Una unidad sintáctica ECMAScript Script puede procesarse utilizando la sintaxis y la semántica de modo no restringido o estricto. El código se interpreta como código de modo estricto en las siguientes situaciones:

El código global es un código de modo estricto si comienza con un Prólogo Directivo que contiene una Directiva de Uso Estricto (ver 14.1.1).

El código de módulo es siempre un código de modo estricto.

Todas las partes de una ClassDeclaration o una ClassExpression son códigos de modo estricto.

El código E val es código de modo estricto si comienza con un Prólogo Directivo que contiene una Directiva de Uso Estricto o si la llamada a eval es una evaluación directa (ver 12.3.4.1) que está contenida en el código de modo estricto.

El código de función es un código de modo estricto si la Función Function, Decression, GeneratorDeclaration, GeneratorExpression, MethodDefinition, o ArrowFunction asociada está incluida en el código de modo estricto o si el código que produce el valor de la ranura interna [[ECMAScriptCode]] comienza con una directiva Prólogo que contiene una directiva de uso estricto.

El código de función que se proporciona como argumentos a los constructores incorporados de Función y Generador es un código de modo estricto si el último argumento es una Cadena que cuando se procesa es un FunctionBody que comienza con un Prólogo Directivo que contiene una Directiva de Uso Estricto.

El código ECMAScript que no es código de modo estricto se llama código no estricto .

Entonces, ¿cuándo es una buena opción utilizar un código no estricto ?

Gracias por adelantado.


Entonces, ¿cuándo es una buena opción no usar el modo estricto?

Agregando a las otras respuestas, si su código javascript es generado o compilado por una biblioteca de terceros. No quieres manipularlo porque no lo escribiste.


Entonces, ¿cuándo es una buena opción no usar el modo estricto?

Cuando está ejecutando un código antiguo (o de un tercero) que aún no ha tenido tiempo de actualizar.

El modo estricto es simplemente mejor. No está activado de forma predeterminada porque rompería el código antiguo que no se había escrito pensando en él.


Entonces, ¿cuándo es una buena opción no usar el modo estricto?

El modo estricto arrojará un error de referencia cuando se encuentren variables no declaradas y en algunos casos.

Si tiene un código escrito sin restricciones, se utilizan variables sin declarar. Una variable declarada dentro de alguna función / ámbito y utilizada desde otro lugar (no se declarará allí) y no puede reescribirla / cambiarla, entonces no debe "use strict;" Modo porque se romperá el código.

De MDN

El modo estricto hace varios cambios a la semántica normal de JavaScript.

  1. el modo estricto elimina algunos errores silenciosos de JavaScript cambiándolos para lanzar errores.
  2. El modo estricto corrige los errores que dificultan que los motores de JavaScript realicen optimizaciones: el código del modo estricto a veces puede ejecutarse más rápido que el código idéntico que no es el modo estricto.
  3. el modo estricto prohíbe la definición de sintaxis en futuras versiones de ECMAScript.

Cuando en strict mode

No puedes usar variables sin declararlas como lo haces en modo no estricto

Es decir

Lo siguiente funcionará porque no es un modo estricto.

a = "Hello World"; console.log(a);

Lo siguiente no funcionará porque está en modo estricto.

''use strict''; a = "Hello World"; // => Throw a reference error console.log(a);

El código anterior generará un error de referencia porque la variable a se usa sin declararla.

Por lo tanto, debe utilizar

''use strict''; var a = "Hello World"; console.log(a);

Ejemplo en modo no estricto

a = "Hello World"; console.log(a);

Ejemplo en modo estricto con error.

''use strict''; a = "Hello World"; console.log(a);

Ejemplo en modo estricto sin error.

''use strict''; var a = "Hello World"; console.log(a);

En breve

el modo estricto lo limitará con muchas restricciones, pero puede mejorar el rendimiento según lo establecido por MDN. También reducir la carga de los motores de JavaScript.

Propina

Si desea migrar del modo no estricto al estricto, debe tener mucho cuidado con cada línea de código y variables y también con sus ámbitos.


Según el enlace de MDN a continuación:

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Strict_mode

Modo estricto en los navegadores.

Los principales navegadores ahora implementan el modo estricto. Sin embargo, no dependa ciegamente de él, ya que todavía hay muchas versiones de navegador utilizadas en la naturaleza que solo tienen soporte parcial para el modo estricto o no lo son en absoluto (por ejemplo, ¡Internet Explorer debajo de la versión 10!). El modo estricto cambia la semántica. Confiar en esos cambios causará errores y errores en los navegadores que no implementan el modo estricto. Tenga cuidado al usar el modo estricto y respalde la dependencia en el modo estricto con pruebas de características que verifican si se implementan partes relevantes del modo estricto. Finalmente, asegúrese de probar su código en los navegadores que sí lo hacen y no son compatibles con el modo estricto. Si realiza la prueba solo en los navegadores que no admiten el modo estricto, es muy probable que tenga problemas en los navegadores que sí lo hacen, y viceversa.