如何传递函数作用域(而不是上下文)?

时间:2019-05-21 08:05:38

标签: javascript this

可以帮我找到代码中的错误吗?我需要将一种方法的范围传递给另一种方法。

var obj = {
    doIt: function() {
        var a = 10;
        this.doThat.call(this);
    },
    doThat: function() {
        console.log(a);
    }
};

obj.doIt();

3 个答案:

答案 0 :(得分:1)

如果要在上下文范围内访问a,可以尝试此操作。

var obj = {
    doIt: function() {
        this.a = 10;
        this.doThat.call(this);
    },
    doThat: function() {
        console.log(this.a);
    }
};

obj.doIt();

答案 1 :(得分:1)

要做来回传递“上下文”(又名this)。 a不过不是当前上下文的一部分,而是当前范围的一部分。因此,您可以将a移至上下文中:

 var obj = {
   doIt: function() {
    this.a = 10;
    this.doThat();
  },
  doThat: function() {
    console.log(this.a);
  }
};

或者您将a的值直接传递给doThat:

   //...
  this.doThat(a);

  doThat(a) { /*...*/ }

答案 2 :(得分:0)

您需要了解contextscope之间存在差异。范围将决定某个特定站点可以访问哪些变量,而上下文是该站点或函数内部的值。

因此,如果要在函数a中使用doThat的值,则需要将a的值与this绑定,doIt是函数this.a = 10;的上下文例如:console.log(this.a),然后在函数doThat内使用{{1}}访问它