javascript - 嵌套函数中的 `This` 是全局对象

标签 javascript object nested-function

<分区>

谁能解释一下这背后的概念?

假设我们有一个函数作为对象的方法:

var myobj = {
    myfunc : function () {      
        console.log(this); // Logs reference to myobj.                            
    }
};
myobj.myfunc();

而同一函数 myfunc 中的嵌套函数将返回对头对象 ( window ) 的引用:

var myobj = {
    myfunc : function () {      
       ( function (){
           console.log(this); // Logs reference to head window object.   
       })();                     
    } 
 };
myobj.myfunc();

我真的很困惑这是如何工作的,因为我认为函数总是返回对父对象的引用。

问题是,这是一个固定规则吗,即任何嵌套函数将始终返回对 window 的引用?

最佳答案

函数内 this 的值取决于它的调用方式,而不是它的定义方式

当你调用myobj范围内的函数时,myobj将是this的值

myobj.myfunc();

当您在没有执行上下文的情况下调用函数时,this 的值将是全局对象,在本例中为 window

function test() {

    console.log(this); // window

}

test(); // global context

当您创建 IIFE 时,执行上下文是窗口,因为没有设置其他上下文

( function (){
    console.log(this); // window
})();

然后是 applycallbind,它们可以让您为被调用的对象设置 this 的另一个值功能。

关于javascript - 嵌套函数中的 `This` 是全局对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25529693/

相关文章:

swift - 在 Swift 中创建一个带有泛型的函数,该函数返回另一个函数

javascript - 向请求添加 header 时出现 HTTP 状态代码 405 错误

javascript - 两名服务人员排成一列

javascript - 用静态字符串替换数组中的最后一个元素

javascript - {()=> (this.whatever)} 与 {this.whatever}

python - Python中使用哈希获取两个对象列表之间的差异

javascript - 当原型(prototype)包含对象时访问 `this` 值?

python - 映射单个函数比两次映射两个单独的函数慢?

sql - 在存储过程中调用存储过程

java - 检查类型为 "Object"的参数对象的特定类型