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