2011-11-25 116 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

希望這有助於。

相關問題