javascript - 通过 call 调用时内部函数的 this

标签 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()。一切对我来说都很清楚 - 外部是在窗口上下文中调用的,并且这个和那个 === 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/

相关文章:

javascript - 链接元素以保持其外观同步

javascript - Visual Studio代码: Installation hook for snippets extension

javascript - 读取变量中上传的文本文件内容

javascript - Vue 3 类与变量的绑定(bind)是否需要内联?

javascript - jQuery.ajax 替换 PHP 代码

javascript - jquery html 操作不适用于选择输入

javascript - 调整窗口大小时 DIV 的相对高度

javascript - Jquery 验证自定义 css 复选框

javascript - 如何在 JavaScript 中检查两个 map 是否具有相同的键集

javascript - react JSX : Access props keys dynamically