Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

283
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.

about 4 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.

about 4 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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda