window
; en Node.js es el objeto global
.var
la única forma de limitar el alcance de una variable era definiéndola dentro de una función:let
y const
limitan el alcance por bloque, es decir, dentro de un condicional, ciclo, función, etc., que es como funcionan la mayoría de lenguajes de programación.var
, let
o const
al definir una variable o automáticamente se creará una variable global.hello
antes de definirla, esto funciona: la declaración de la función se mueve al principio del archivo antes de ejecutarlo.undefined
porque, aunque la declaración de x
se mueve al principio, la inicialización no. El anterior código es equivalente a lo siguiente:hello
utiliza una variable externa name
. En la línea 8 estamos almacenando la función retornada en una variable newHello
. Cuando invocamos la función se mantiene la referencia a la variable name
."use strict"
"use strict"
fue introducida en ES5 para evitar lo que se consideran malas prácticas en JavaScript (p.e. utilizar variables no declaradas). En vez de ignorar la mala práctica se genera un error."use strict"
es ignorada por versiones anteriores de JavaScript."use strict"
al principio de un archivo (alcance global) o de una función (alcance local)."use strict"
evita son:eval
(eval
permite evaluar código a partir de un string).