僅在JavaScript代碼中使用局部變量更安全嗎?全局與局部變量的安全性?
據我瞭解 $(document).ready(function() {code here...}
塊內聲明的變量是局部的。這些意思是不能被其他腳本訪問或更改的?
另外,如果一個變量被聲明爲全局變量,但是在本地賦值,那麼這個變量是全局可見的嗎?
var a; function myFunction() { var a = 4; }
在頁面上的其他腳本能夠看到的a
值被設置爲4?
僅在JavaScript代碼中使用局部變量更安全嗎?全局與局部變量的安全性?
據我瞭解 $(document).ready(function() {code here...}
塊內聲明的變量是局部的。這些意思是不能被其他腳本訪問或更改的?
另外,如果一個變量被聲明爲全局變量,但是在本地賦值,那麼這個變量是全局可見的嗎?
var a; function myFunction() { var a = 4; }
在頁面上的其他腳本能夠看到的a
值被設置爲4?
不,您的函數中的變量a
在函數範圍外是不可見的。如果您嘗試在代碼中的其他位置訪問變量a
,它將顯示undefined
,因爲您剛剛聲明瞭該變量,但沒有爲其分配任何值。
讓我們來擴展你的例子:
var a;
function myFunction() {
var a = 4;
}
function anotherFunction() {
console.log(a);
}
anotherFunction();
> undefined
當我們稱之爲anotherFunction()
它訪問的globaly宣佈a
,它不會看到局部變量a
從myFunction
。他們完全不同。
最好不要以這種方式使用局部變量。如果需要的話,你最好將它們分組在一個對象,這將有一個命名空間的作用:
var allMyLocalVariables = {
a: 'a',
b: 'b'
}
現在,您可以隨時隨地訪問他們像這樣:
console.log(allMyLocalVariables.a);
的概率,他們如果你爲對象/命名空間選擇了一個合理而有意義的名字,將會與其他變量發生衝突的可能性非常低。
注意:如果你在函數內部用'var'重新聲明'a',這將會創建第二個變量,它將是本地的,從而隱藏對第一個變量的訪問。如果你使用了'a = 4',它會將值設置爲聲明的第一個值。我建議你也閱讀關於javascript var的提升。 – Kaddath
是的,是的,不,不。 – Bergi
看看這個http://stackoverflow.com/questions/10525582/why-are-global-variables-considered-bad-practice – Alexis