我有以下代码:
var outer = function(){
var that = this;
function inner(){
assert(this===that, "Inner === Outer");
console.log(this);
console.log(that);
}
inner();
return this;
};
outer();
var obj = {};
outer.call(obj);
当第一次调用被执行时——outer()。一切对我来说都很清楚 - 外部是在窗口上下文中调用的,并且这个和那个 === window.然后,当我调用函数外部的调用函数时,事情就会变得连线。那 === obj,这是显而易见的,但为什么 this === window ?
最佳答案
因为引入闭包会丢失上下文。 this
仅取决于您如何调用该函数。它可以是隐式的,就像对象方法的情况一样。在您的代码中,inner
不会在任何上下文中调用,因此它将默认为 window
。你可以这样做:
var outer = function(){
var that = this;
function inner(){
assert(this===that, "Inner === Outer");
console.log(this);
console.log(that);
}
inner.call(this); // explicit context
return this;
};
关于javascript - 通过 call 调用时内部函数的 this,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20740115/