【发布时间】:2019-10-05 06:20:29
【问题描述】:
var obj, method;
obj = {
go: function() { console.log(this); }
};
(method = obj.go)()
注意:Fyodor 对他的回答的第一条评论对我帮助最大。正如主题所暗示的,这更多是关于括号而不是this。
最后一行,我的理解是括号会强制里面的代码先运行,所以method取了go属性的值,这是一个函数。
() 然后调用该函数,该函数将window 记录到控制台,因为它没有作为方法调用。
如果你不使用(method = obj.go)(),而是使用method = obj.go(),它将首先运行go 函数,method 将获取它返回的值。由于go 什么都不返回,所以它将是undefined。 go 打印的值将是 obj。
我不明白的是,为什么如果我这样做 (obj.go)() 打印的 this 是 obj 而不是 window?
考虑到其他代码的工作方式,我希望这段代码能够像这样工作:
obj.go 首先在括号内求值,然后函数作为 IIFE (function() { console.log(this); })() 运行。因此,由于该函数不是作为obj 的方法调用的,所以this 默认为window。
【问题讨论】:
标签: javascript this parentheses