2017-05-24 34 views
3

叫时请考虑以下变量:为什么括号保持这种在同一份声明中

var obj = { 
    value : 'from object', 
    getValue : function() { return this.value; } 
}; 

var value = 'from global'; 

现在,obj.getValue()评估为'from object'。如果我得到一个引用只是getValue函数,并调用它:

var f = obj.getValue; 
f(); 

˚F评估为'from global'

我的问题是为什么(obj.getValue)();返回'from object'

我原以为第一组圆括号会评估为对getValue函数的简单引用,然后在调用该结果时,this将是全局上下文。为什么解释者会认为这是对象的调用?

回答

1

当您拨打var f = obj.getValue();时,您正在从对象运行getValue方法。当您拨打var f = obj.getValue;时,您将重新分配该功能到f,然后当您拨打f时,它与obj没有任何联系,它简单地称为全局功能。

+0

我明白了。我的问题是为什么'(obj.getValue)()'保持obj范围? – Patrick

+0

问题是为什么'(obj.getValue)()'充当'obj.getValue()',而在词法上它看起来更像'f = obj.getValue; f()的' – wostex

相关问题