变量不保持对“this”的引用

时间:2018-05-27 01:59:09

标签: javascript

function test1() {
  this.name = 'test1';
  var that = this;

  function test2() {
    this.name = 'test2';
    console.log(that.name);
  }

  test2();
}

test1();

执行此操作时,我希望控制台注销test1。为什么我会改为test2?我希望that变量能够保存对test1函数的引用。

2 个答案:

答案 0 :(得分:1)

您的变量 成为对象引用,因为您为其指定了关键字 this 。这意味着变量 将是一个对象,它将引用 this (即当前对象)。

此外,变量 不是值类型。这是一个对象。

有关详细信息,请搜索"值类型与引用类型"。

希望这有帮助。

答案 1 :(得分:0)

在函数定义中,这指的是函数的“所有者”。 请在内联评论中找到说明。 根据执行顺序重新排列代码,

test1();                      //Now this is called by window object
function test1() {
  this.name = 'test1';        //window.name = 'test1';
  var that = this;            //that is also now window obj
  test2();                    //this.test2 or window.test2()
  function test2() {
    this.name = 'test2';      //window.name is now test 2
    console.log(that.name);   //since in third step, that is window, that.name or window.name is now test 2
  }
}