He estado buscando la referencia de JavaScript en la red de desarrolladores de Mozilla, y me encontré con algo llamado "strict mode"
. Lo leí y tengo problemas para entender lo que hace. ¿Alguien puede explicar brevemente (en general) cuál es su propósito y cómo es útil?
javascript
strict-mode
nkcmr
fuente
fuente
Respuestas:
Su objetivo principal es hacer más comprobaciones.
Simplemente agregue
"use strict";
en la parte superior de su código, antes que nada.Por ejemplo,
blah = 33;
es JavaScript válido. Significa que crea una variable completamente globalblah
.Pero en modo estricto es un error porque no usó la palabra clave "var" para declarar la variable.
La mayoría de las veces no se trata de crear variables globales en el medio de un alcance arbitrario, por lo que la mayoría de las veces
blah = 33
escrito es un error y el programador no quería que fuera una variable global, querían decir a escribirvar blah = 33
.Del mismo modo, no permite muchas cosas que son técnicamente válidas para hacer.
NaN = "lol"
No produce un error. Tampoco cambia el valor de NaN. El uso estricto de esto (y declaraciones extrañas similares) produce errores. La mayoría de las personas aprecian esto porque no hay razón para escribirNaN = "lol"
, por lo que probablemente hubo un error tipográfico.Lea más en la página de MDN en modo estricto
fuente
Un aspecto de modo estricto no se ha mencionado en la respuesta de Simon es que el estricto Mode Sets
this
aundefined
en funciones invocan a través de invocación de la función.Entonces cosas como esta
causará un error cuando
privateMethod
se llame (ya que no puede agregar una propiedad aundefined
), en lugar de agregar unab
propiedad al objeto global de manera inútil .fuente
privateMethod.bind(this)();
y llamar connew
jsbin.com
Se agregó el modo estricto para que hubiera un subconjunto fácilmente analizable estáticamente de EcmaScript que sería un buen objetivo para futuras versiones del lenguaje. El modo estricto también se diseñó con la esperanza de que los desarrolladores que se limitan al modo estricto cometan menos errores y que los errores que cometan se manifiesten de manera más obvia.
Harmony , que con suerte se convertirá en la próxima versión principal de EcmaScript, se construirá sobre ES5 estricto.
Algunos otros experimentos de idiomas también dependen del modo estricto. SES depende de la capacidad de análisis del modo estricto ES5.
El Anexo C de la norma explica las diferencias entre el modo estricto y el modo normal.
fuente
Invocación de modo estricto en código
El modo estricto se aplica a scripts completos o a funciones individuales. No se aplica a la declaración de bloque encerrada entre {} llaves, intentar aplicarla a dichos contextos no hace nada.
Guión completo:
Digamos que estamos creando app.js, por lo que agregar el script de uso de la primera instrucción impondrá el modo estricto para todo el código.
Modo estricto para la función:
Para invocar el modo estricto para una función, ponga la declaración exacta "use estricto"; en el inicio del cuerpo de la función antes de cualquier otra declaración.
El modo estricto incorpora varios cambios a la semántica normal de Javascript. El primer modo estricto elimina algunos errores silenciosos de JavaScript cambiándolos para arrojar errores.
Por ejemplo: código usando el modo estricto
En el ejemplo de código anterior sin usar el modo estricto en el código, no arrojará un error. Como estamos accediendo a la variable
x
sin declararla. Entonces, en modo estricto, el acceso a la variable no declarada arroja un error.Ahora intentemos acceder a la variable x sin declararla sin el modo estricto.
Ventaja de usar el modo estricto:
fuente
El modo estricto realiza varios cambios en la semántica de JavaScript normal.
el modo estricto elimina algunos errores silenciosos de JavaScript al cambiarlos para arrojar errores.
El modo estricto corrige errores que dificultan que los motores de JavaScript realicen optimizaciones.
el modo estricto prohíbe que se defina cierta sintaxis en futuras versiones de ECMAScript.
fuente
ECMAScript5
introduce algunos objetos y propiedades nuevos y también los llamados"strict mode"
.El modo estricto es un subconjunto del lenguaje que excluye características obsoletas. El modo estricto es opcional y no es obligatorio, lo que significa que si desea que su código se ejecute en el modo estricto, declara su intención utilizando (una vez por función o una vez para todo el programa) la siguiente cadena:
fuente
2017 y finalmente encontré la documentación:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
fuente
Pregunta: El
siguiente es el problema que encontré, estaba siguiendo un tutorial y terminé intentando compilar el siguiente
scss
archivo e intentando generar código CSS a partir de él,usando la siguiente
gulpfile.js
tarea:Entonces el error que obtengo es el siguiente:
Solución:
Entonces me muestra el
index.js
archivo que está dentro de mi módulo gulp-sass (que está básicamente bloqueado y no debe editarse). Pero si voy con fuerza y agrego el"use_strict"
en la parte superior de eseindex.js
archivo, ejecuta mi tarea sin problemas.Estaba indefenso, ¡así que sigo usando esto como la solución! Pero luego de pasar por otras preguntas y respuestas sobre SO , vi la siguiente respuesta de la siguiente manera:
y antes actualicé mis NodeJs (a Version10.x), y luego reconstruí Gulp ejecutando los siguientes comandos como Terminal me indicó:
Y todo está bien. Así es como se resolvió. Deshice los cambios que hice para el
index.js
archivo del módulo gulp. Y ahora funciona sin problemas.¡Espero que esta respuesta sea útil para alguien por ahí!
fuente