将作用域从一个函数传递到另一个函数



我有一个对象litrel,它有两个匿名函数定义如下:

obj = {
    funcA : function(){
        var a = 'a';
    },
    funcB : function(){
        // but how do you access the scope in 'funcA' to access variable 'a'?
        console.log(a)
    }
}

我不想传递任何变量只是'funcA'的范围-想法?

JavaScript作用域不像那样工作,因为它(只有)函数作用域(除非使用let关键字)。

可以做的是…

obj = {
    a: 0,
    funcA: function() {
        this.a = 'a';
    },
    funcB: function() {
        console.log(this.a);
    }
};

jsFiddle .

可以在模块模式中使用a闭包来访问外部作用域中的变量。多个函数可以访问变量:

var obj = (function() {
  var a;
  return {
    setA: function(value) {
      a = value;
      return a;
    },
    getA: function(value) {
      return a;
    },
    multiplyA: function(value) {
      a = a * value;
      return a;
    }
  };
}());

alert(    obj.setA(5)      );  // 5
alert(    obj.multiplyA(2) );  // 10
alert(    obj.getA()       );  // 10

请参阅Douglas Crockford关于JavaScript中的私有成员的文章。通过这种方式,函数可以在它们的作用域链上共享一个公共变量对象。您仍然不能引用它或将其传递给另一个函数,但您可能能够获得您想要的功能。

这段代码是否符合您的要求?如果不是,我真的很好奇为什么。

obj = {
    funcA : function(){
        this.a = 'a';
        alert(this.a);
    },
    funcB : function(){
        // but how do you access the scope in 'funcA' to access variable 'a'?
        alert(this.a);
    }
}
obj.funcA();
obj.funcB();

访问单独函数的实际作用域和在父对象上设置成员之间的区别是什么?

此外,由于没有传递作用域的方法,您是否打算使用类似于此代码的东西来代替?

最新更新