【发布时间】:2020-12-23 12:47:42
【问题描述】:
谈话很便宜;给我看代码。
// equals to this.test = "inside window"
var test = "inside window";
function f () {
console.log(this.test)
};
var obj = {
test: "inside object",
fn: f
};
obj.fn(); // "inside object" --> fine
(obj).fn(); // "inside object" --> fine
(1, obj).fn(); // "inside object" --> fine
(obj.fn)(); // "inside object" --> fine
(0 || obj.fn)(); // "inside window" --> why?
// reference equality check
console.log(
f === obj.fn &&
(obj.fn) === f &&
f === (1, obj.fn)
); // all equal :/
我读过 ydkjs 书,熟悉调用站点和动态 this 绑定,但我不明白为什么最后一个函数调用将 window 作为其 this 上下文;在这个受控实验中,唯一的
这已更改 () 和 comma operator 并且您可以在最后一条语句中看到 comma operator 正在做一些奇怪的事情。我怀疑它在返回值时会进行赋值(因为如果我们进行赋值,也会发生相同的结果),但我不确定。
更新:
在&&、|| 运算符上也可以看到效果:(0 || obj.fn)()
【问题讨论】:
标签: javascript this comma-operator