真正访问函数
a私有范围的唯一方法是在函数
b内部声明,
a这样就形成了一个闭包,允许隐式访问
a变量。
这是您的一些选择。
直接访问
b
在内部声明a
。
function a() { var x = 5, obj = {}; function b(){ // access x or obj... } b(); } a();- 如果您不想
b
在中使用a
,则可以将它们都放在更大的容器范围内:
function container() { var x, obj; function a(){ x = 5; obj = {..}; b(); } function b(){ // access x or obj... } } container.a();这些是您可以
a直接使用的变量
b而无需任何额外的代码来移动内容的唯一方法。如果您对一点“帮助”和/或间接的内容感到满意,这里有一些更多的想法。
间接访问
- 您可以只将变量作为参数传递,但除了对象的属性之外,将没有写访问权限:
function a() { var x = 5, obj = {}; b(x, obj); } function b(x, obj){ // access x or obj... // changing x here won't change x in a, but you can modify properties of obj } a();作为此方法的一种变体,您可以通过将更新后的值传递回来获得写访问权,
a如下所示:
// in a: var ret = b(x, obj); x = ret.x; obj = ret.obj; // in b: return {x : x, obj : obj};- 您可以
b
使用可访问a
的私有变量的getter和setter 传递对象:
function a(){ var x = 5, obj = {..}, translator = { getX : function() {return x;}, setX : function(value) {x = value;}, getObj : function() {return obj;}, setObj : function(value) {obj = value;} }; b(translator); } function b(t){ var x = t.getX(), obj = t.getObj(); // use x or obj... t.setX(x); t.setObj(obj); // or you can just directly modify obj's properties: obj.key = value; } a();获取器和设置器可以是公共的,分配给的
this对象
a,但是只有从内部明确给出时,它们才可以访问
a。
- 您可以将变量放在一个对象中并传递该对象:
function a(){ var v = { x : 5, obj : {} }; b(v); } function b(v){ // access v.x or v.obj... // or set new local x and obj variables to these and use them. } a();作为一种变体,您可以在调用时构造对象:
function a(){ var x = 5, obj = {}; b({x : x, obj: obj}); } function b(v){ // access v.x or v.obj... // or set new local x and obj variables to these and use them. } a();


