我有以下代码:
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);
执行第一次调用时-external()。一切对我来说都很清楚-外部在窗口上下文以及===窗口中被调用。然后,当我调用外部调用函数be时,事情就变得混乱了。那=== obj,这很明显,但是为什么这===窗口呢?
因为您通过引入闭包而失去了上下文。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;
};
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句