Ejemplo No:1
function foo() { console.log(this.bar) } var bar = "bar1" foo();Ejemplo No:2
function foo() { console.log(this.bar) } var o2 = {foo:foo} console.log(o2.foo()) Ejemplo No:1 imprimirá bar1 donde como ejemplo no:2 imprimirá undefined . Me parece bastante contrario a la intuición que en el primer escenario javascript mirará el alcance global mientras que en el segundo escenario no usará reglas de alcance.
¿Por qué el lenguaje funciona de esta manera o es una regla arbitraria que debo recordar (siempre que haya un objeto involucrado, el motor de JavaScript no considerará las reglas de alcance)