我有以下代码:
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);
Run Code Online (Sandbox Code Playgroud)
执行第一次调用时 - outer().对我来说一切都很清楚 - 外部在窗口上下文中调用,这个和那个===窗口.然后当我调用函数外部调用函数时,事情变得有线.那个=== 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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47 次 |
| 最近记录: |