你有可能有意或者无意地创建一个函数的“间接引用”,在这个情况下,调用这个函数会应用默认规则
间接引用最容易在赋值时发生:
function foo(){ console.log(this.a); } var a = 2; var o = { a: 3, foo: foo}; var p = { a: 4 }; o.foo(); // 3 (p.foo = o.foo)(); // 2
赋值表达式 p.foo = o.foo 的返回值是目标函数的引用,因此调用位置是 foo(),不是o.foo()。根据之前隐式绑定说的,这里会应用默认绑定