2011-11-25 64 views
1

假设我有一个JavaScript函数。它包含一个变量x;是否可以访问javascript函数的私有变量

function A(){ 
    var x = 12+34; 
} 

是否可以从外部函数x访问x?

+4

您的最终目标是什么?也许你想看对象 –

+0

编号'x'是本地的。 http://stackoverflow.com/questions/500431/javascript-variable-scope – adarshr

+1

在你拥有它的方式,不,这就是为什么它是“私人”。顺便说一句,命名数字和函数'x'并不是一个很好的选择。 – pimvdb

回答

3

没有,这样做的能力没有任何意义。假设我们稍微改变你的函数,并把它称为3倍:

function x(n){ 
    var x = n+34; 
} 

x(1), x(2), x(3); 

在这一点上,该功能已运行3次,所以变量x已创建3倍 - x你会希望能够访问哪些?然后有垃圾收集;如果浏览器在变量不在范围内时必须保持变量存活,那么如何从内存中清除引用和数据?

如果你想,你可以做这样的事情:

function x() { 
    x.x = 12+34; 
} 
x(); 

,或者,如果变量是静态/恒定,你拥有了它

function x() { } 
x.x = 12+34; 

或最后,其他人指出,通过在功能范围外声明x以不同的名称:

var y; 
function x() { 
    y = 12+34; 
} 
x(); 
0

是的,但不在上面的示例范围。你必须使用闭包。考虑以下几点:

var x, 
    A = function() { 
     x = 12 + 34; 
    }; 

通过这种方式,你可以从功能A.什么是更好的内部访问x是X具有A的私有成员的直接访问,因此可用于泄漏到外面的私人数据A.

+0

答案没有解决问题。这个答案描述了一个与Shusl所问的根本不同的情况。 – outis

+0

是不是真的,你怎么可能知道Shusl打算什么?也许舒斯尔并不知道关闭是一种惯例/选择,所以没有想到用这种方式提出问题。 – austincheney

+0

这就是为什么这个答案没有解决这个问题:你不能知道舒斯尔想要什么,只有舒斯尔问什么。如果您怀疑这个问题没有解决Shusl真正想知道的内容,那么您应该要求澄清(尽管您需要为此获得更多的重要信息)。或者,回答所问的问题,然后包括一个预测提问者需求的部分,就像Andy E所做的那样。就目前来看,“是”是舒斯尔问题的错误答案。 – outis

0

你不能直接通过它的名字来访问它,尝试从变量声明中删除'var',因为这应该使变量为全局变量,或者将它们放在ready函数之外。并从函数返回x的值。

你可以做一些这样的事:

$(document).ready(function() {  
     var x; 
     function x(){ 
      x = 12+34; 
      return x; 
     } 
     alert(x()); 
}); 

Here is its jsfiddle

希望这有助于。

相关问题