• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

219
Vistas
¿Por qué no puedo acceder a una variable declarada en el ámbito global?

 var bar = { myName: 'bar', printName: function () { console.log(this.myName) } } function foo() { let myName = 'foo' return bar.printName } let myName = 'outer' let _printName = foo() _printName() bar.printName()

¿Por qué el resultado de la ejecución de la primera función no está definido? Pensé que el resultado sería 'externo', y ¿por qué generar 'externo' después de cambiar let a var? Esto es muy confuso, por favor ayúdame.

over 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

¿Por qué el resultado de la ejecución de la primera función no está definido?

Porque no vincula this a nada en la llamada a la función (no tiene objectThatWillBecomeThis.printName() ni printName.call(objectThatWillBecomeThis) ). En modo estricto, this fallaría porque entonces no estaría undefined y usted intentaría leer undefined.myName . Pero dado que no habilitó el modo estricto, el comportamiento heredado está activo en el que this , cuando no se establece explícitamente, se establecerá en el objeto global. Sin embargo, el objeto global no tiene ninguna propiedad myName (en el navegador: no hay window.myName ), por lo que el resultado no está undefined .

¿Por qué mostrar 'exterior' después de cambiar let a var?

Porque si ejecuta este código en el ámbito global, var fuera de cualquier otro ámbito creará una propiedad en el objeto global ( window.myName ). let hagas eso :

En el nivel superior de programas y funciones, let , a diferencia de var , no crea una propiedad en el objeto global. Por ejemplo:

 var x = 'global'; let y = 'global'; console.log(this.x); // "global" console.log(this.y); // undefined

Si moviera el código dentro de una función, tampoco funcionaría, por cierto, porque la instrucción var (o let , no importa ahora) simplemente crearía una variable local en la función y no una propiedad en el objeto global, por lo que no habría forma de acceder a él a través de la propiedad myName de ningún objeto.

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda