Javascript ';这';表现不同

Javascript ';这';表现不同,javascript,javascript-objects,Javascript,Javascript Objects,为什么上面的代码返回3和1 var x = 3; var obj1 = { x:2, obj2:{ x:1, fun: function() { console.log(this.x); } } } var exec = obj1.obj2.fun; exec(); obj1.obj2.fun(); 此语句返回函数的引用。不是函数返回的值 现在,当您调用exec()时,它将运行函数,但将取全局变量x的值 因此,基本上如

为什么上面的代码返回
3
1

var x = 3;

var obj1 = {
   x:2,
   obj2:{
      x:1,
      fun: function() {
         console.log(this.x);
      }
   }
}

var exec = obj1.obj2.fun;
exec();
obj1.obj2.fun();
此语句返回函数的引用。不是函数返回的值

现在,当您调用exec()时,它将运行函数,但将取全局变量x的值

因此,基本上如果您使用console.log exec,它将显示函数代码,而不是值

在最后一行中,实际上是从对象内部执行函数,因此当
exec()
函数调用它时,它返回obj2.x的值。

引用为窗口对象。因此,它显示3作为输出。因为全局
x
变量的值为3

obj1.obj2.fun()
函数调用它时,请参考
为obj2对象。因此,它将1显示为输出。因为obj2拥有自己的属性x,其值为1

您可以在此处了解有关此的更多信息

var exec = obj1.obj2.fun