entre diferencia javascript node.js google-chrome ecmascript-6 v8

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.