javascript - diferencia entre var y const
Usar ''let'' como nombre de variable no arroja ningĂșn error en google v8 (2)
El uso de palabras clave reservadas de ES6 está prohibido solo en modo estricto por razones de compatibilidad.
Babel (a través del plugin de modo estricto ) usa el modo estricto por defecto. En el navegador o en el Nodo, puede establecer implícitamente el modo estricto agregando "use strict";
al comienzo del archivo o la función.
La ejecución del siguiente fragmento de código arrojará un error en Chrome como lo espera:
"use strict";
var let = 43;
// Throws: Uncaught SyntaxError: Unexpected strict mode reserved word
Estaba escribiendo un código aleatorio en la consola de desarrollo de Chrome. Para mi sorpresa, Chrome me permitió usar let
como un nombre de variable que está completamente mal, ya que let
es una palabra clave reservada. Necesito entender por qué está sucediendo esto.
Escenarios:
var const = 78 //throws an error as expected
var function = 46 //throws an error as expected
var let = 56 //didn''t throw an error :O
let //prints 56, which is wrong because ''let'' is a keyword
let ab = 90
ab //prints 90 as expected
Esta falla existe en el node
. Pero cuando lo pruebo en Babel REPL arroja un error.
Creo que esto tiene algo que ver con Google v8
Una buena reseña del razonamiento detrás de esto se puede encontrar en este artículo de Mohsen Azimi . Aquí hay un resumen rápido de esto.
Las siguientes palabras clave se definen en la especificación JavaScript como FutureReservedWord
:
implements interface let package private
protected public static yield
En modo normal, estos pueden usarse como nombres de variables sin errores; sin embargo, en modo estricto se tratan como palabras reservadas y emitirán el siguiente error:
SyntaxError: Cannot use the reserved word ''let'' as a variable name in strict mode.
Esto es para que el código anterior a ES2015 no se rompa; si alguien hubiera nombrado muchas de sus variables para una aplicación heredada, probablemente no estarían felices si la especificación JS repentinamente rompiera todo.