自我执行功能的范围

时间:2019-01-20 19:28:03

标签: 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
    })();
  }
};

myObj.func();

尽管如此,在以下情况下,全局作用域仍能正常工作。在外部作用域中声明的test1在内部函数中完全可用。

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

任何人都可以在这里解释我所缺少的东西吗?

1 个答案:

答案 0 :(得分:0)

在内部函数中,this引用全局对象(如果不是在严格模式下)。

您可以像这样修改代码以达到您期望的结果:

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

myObj.func();