Enesta documentación de JavaScript , dice:
Las declaraciones var y las declaraciones de funciones en el nivel superior crean propiedades del objeto global. Por otro lado, las declaraciones let y const nunca crean propiedades del objeto global.
¿Qué significa "declaraciones de funciones en el nivel superior"? ¿Significa funciones que no son funciones internas?
Nivel superior significa que no está dentro de otras funciones, objetos, clases o cierres. Donde this
se refiere al objeto window
.
console.log(this === window) // true var x = 5 function foo() { console.log(this === window) // true var y = 3 } foo.call(this); console.log(y) // not defined
¿Qué significa "declaraciones de funciones en el nivel superior"? ¿Significa funciones que no son funciones internas?
Sí, significa exactamente eso. Se refiere a la sintaxis de las declaraciones: cualquier cosa que no esté anidada dentro de alguna otra estructura sintáctica.
Sin embargo, la afirmación no es del todo exacta. Debe estar restringido al "nivel superior de scripts ", ya que las declaraciones de function
y var
en el nivel superior del código del módulo no crean variables globales, sino que declaran variables en el ámbito global. Además, las declaraciones de var
en bloques ( { … }
) aún declaran variables globales (que se convierten en propiedades del objeto global) siempre que no estén anidadas en una función.