2017-05-10 40 views
0

僅在JavaScript代碼中使用局部變量更安全嗎?全局與局部變量的安全性?

據我瞭解 $(document).ready(function() {code here...} 塊內聲明的變量是局部的。這些意思是不能被其他腳本訪問或更改的?

另外,如果一個變量被聲明爲全局變量,但是在本地賦值,那麼這個變量是全局可見的嗎?

var a; function myFunction() { var a = 4; }

在頁面上的其他腳本能夠看到的a值被設置爲4?

+1

注意:如果你在函數內部用'var'重新聲明'a',這將會創建第二個變量,它將是本地的,從而隱藏對第一個變量的訪問。如果你使用了'a = 4',它會將值設置爲聲明的第一個值。我建議你也閱讀關於javascript var的提升。 – Kaddath

+0

是的,是的,不,不。 – Bergi

+0

看看這個http://stackoverflow.com/questions/10525582/why-are-global-variables-considered-bad-practice – Alexis

回答

1

不,您的函數中的變量a在函數範圍外是不可見的。如果您嘗試在代碼中的其他位置訪問變量a,它將顯示undefined,因爲您剛剛聲明瞭該變量,但沒有爲其分配任何值。

讓我們來擴展你的例子:

var a; 
function myFunction() { 
    var a = 4; 
} 
function anotherFunction() { 
    console.log(a); 
} 
anotherFunction(); 
> undefined 

當我們稱之爲anotherFunction()它訪問的globaly宣佈a,它不會看到局部變量amyFunction。他們完全不同。

最好不要以這種方式使用局部變量。如果需要的話,你最好將它們分組在一個對象,這將有一個命名空間的作用:

var allMyLocalVariables = { 
    a: 'a', 
    b: 'b' 
} 

現在,您可以隨時隨地訪問他們像這樣:

console.log(allMyLocalVariables.a); 

的概率,他們如果你爲對象/命名空間選擇了一個合理而有意義的名字,將會與其他變量發生衝突的可能性非常低。

+0

不同意這一點。當您更改全局變量時,其全局值也會更改並且可以訪問 – Alexis

+0

您不會更改全局變量。 'myFunction'中的變量'a'與全局變量'a'不一樣。如果你做這樣的陳述:'a = 4',沒有關鍵字'var',那將是另一回事。 – cezar

+1

如果你在函數中使用var,那麼你不使用全局變量,你只是定義一個局部變量,不使用全局變量...... – Alexis