JavaScript对象函数和`this`在未绑定并在表达式/ parens中返回时

Tom*_*tes 9 javascript this

第1-2和第4-5行在this返回方面有意义.关于第3行,我错过了什么?我认为它将返回window类似于4-5行.是否还有另外一种模式可以帮助说明原因?

foo = { bar : function () { return this } }

foo.bar() // ==> foo

(foo.bar)() // ==> foo / but why?

(foo.bar ? foo.bar : $.noop)() // ==> window

(foo.bar || 0)() // ==> window
Run Code Online (Sandbox Code Playgroud)

Ber*_*rgi 9

分组运算符不会破坏属性引用,这会引发方法调用.

这在规范中明确提到:

注意:此算法不会将GetValue应用于评估结果Expression.这样做的主要动机是使运算符如deletetypeof可以应用于带括号的表达式.

在第4行和第5行中,它不是括号,而是取消引用属性并生成"未绑定"函数的运算符(?:||).