在尝试执行以下代码段时,我希望doFoo.call(obj, obj.foo)
调用返回"inside obj"
,因为调用堆栈中前一个元素的动态范围具有对的引用,a
但调用具有全局上下文。我在这里想念什么?
function foo() {
// debugger
console.log(this, this.a);
}
function doFoo(fn) {
// `fn` is just another reference to `foo`
// debugger
fn()
// <-- call-site!
}
var obj = {
a: 'inside obj',
foo: foo
};
var a = "oops, global"; // `a` also property on global object
doFoo(obj.foo); // "oops, global"
doFoo.call(obj, obj.foo) // "oops, global"```