Javascript 在自动执行函数中的范围

Javascript 在自动执行函数中的范围,javascript,self-executing-function,Javascript,Self Executing Function,有人能告诉我为什么全局范围不适用于以下情况吗?为什么第6行打印未定义?外部“this”不应该在内部自执行函数中可用吗 var myObj = { test1 : 4, func : function(){ console.log(this.test1); //prints 4 (function(){ console.log("From self-executing function : " + this.test1); //prints undefined

有人能告诉我为什么全局范围不适用于以下情况吗?为什么第6行打印未定义?外部“this”不应该在内部自执行函数中可用吗

var myObj = {
  test1 : 4,
  func : function(){
    console.log(this.test1); //prints 4
    (function(){
      console.log("From self-executing function : " + this.test1); //prints undefined
    })();
  }
};

myObj.func();
其中,在以下情况下,全局范围正常工作。外部范围中声明的test1在内部函数中完全可用

var test1 = 10;
    (function(){
      console.log("From self-executing function : " + test1); //prints 10
    })();

有人能解释一下我在这里遗漏了什么吗?

在内部函数中,
这个
指的是全局对象(如果不是在严格模式下)

您可以像这样修改代码以实现预期的结果:

var myObj = {
  test1 : 4,
  func : function(){
    console.log(this.test1);
    var self = this;
    (function(){
      console.log("From self-executing function : " + self.test1);
    })();
  }
};

myObj.func();

与函数中的函数有关,您需要将其传递给第二个。不知道具体原因..尝试
console.log(this)
查看这是什么
this
value@FZs ... 我试过了,它说“这个”内部函数是“[对象窗口]”,但不明白为什么会这样?为什么在这种情况下外部作用域未激活?您可以绑定第二个函数或使用箭头函数“全局作用域”!=“外部范围”。