我有一个对象litrel有2个匿名函数定义如下:
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'的范围 - 想法?
答案 0 :(得分:6)
JavaScript范围不起作用,因为它具有(仅)功能范围(使用let
关键字时除外)。
可以做的是......
obj = {
a: 0,
funcA: function() {
this.a = 'a';
},
funcB: function() {
console.log(this.a);
}
};
答案 1 :(得分:1)
您可以使用带模块模式的闭包来访问外部作用域中的变量。多个函数可以访问变量:
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关于Private Members in JavaScript的文章。通过这种方式,函数可以在其作用域链上共享公共变量对象。您仍然无法引用它或将其传递给另一个函数,但您可能能够获得所需的功能。
答案 2 :(得分:0)
此代码是否符合您的要求?如果没有,我真的很好奇为什么。
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();
访问单独函数的实际范围和在父对象上设置成员之间的区别是什么?
此外,由于没有通过范围的方法,您是否只会使用与此代码类似的内容?