¿Por qué obtengo 2 resultados diferentes cuando ejecuto Chrome -> DevTools -> Sources y cuando ejecuto JSFiddle?
El código que ejecuto es el siguiente
function foo() { this.baz = "baz" console.log(this.bar + " " + baz); } var bar = "bar"; var baz = new foo(); console.log(baz.baz)Salida en cromo
undefined [object Object] bazSalida en JSFiddle
"undefined undefined" "baz" Esencialmente, Chrome me dice que baz es un objeto de tipo {baz:"baz"} pero jsFiddle me dice que no está definido.
¿Estás seguro de que no ejecutaste el mismo código en Chrome dos veces ?
La primera vez que baz está claramente indefinido, pero si vuelve a pegar el mismo código, tiene el valor que ya definió ( var baz = new foo(); ).
Cuando se ejecuta una página estándar con ese código, el resultado es undefined undefined y luego baz .
Dentro de la función, baz hace referencia a la variable externa denominada baz , que es la instancia que se está creando (pero aún no se ha creado; se creará después de que la función foo devuelva la instancia). Entonces, en ese momento, debería estar undefined .
Pero la consola no es como una página web estándar; guardará los valores anteriores asignados a las variables cuando lo ejecute de nuevo. Debe haber ejecutado el código más de una vez, en cuyo caso, es como hacer
function foo() { this.baz = "baz" console.log(this.bar + " " + baz); } var bar = "bar"; var baz = new foo(); console.log(baz.baz) // you probably cleared the console manually at this point // before running it again function foo() { this.baz = "baz" console.log(this.bar + " " + baz); } var bar = "bar"; var baz = new foo(); console.log(baz.baz) entonces el [object Object] que ve es de una instancia de ejecución anterior.