通过调用调用时的内部函数

时间:2013-12-23 08:59:59

标签: javascript

我有以下代码:

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()。对我来说一切都很清楚 - 外部在窗口上下文中调用,这个和那个===窗口。然后当我调用函数外部调用函数时,事情变得有线。那个=== obj,很明显,但为什么这个===窗口?

1 个答案:

答案 0 :(得分:5)

因为您通过引入闭包来丢失上下文。 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;
};