2017-05-10 18 views
0

JavaScriptコード内でローカル変数のみを使用する方が安全ですか?グローバルvsローカル変数の安全性?

$(document).ready(function() {code here...} ブロック内で宣言された変数がローカルであることを理解しています。これは他のスクリプトによってアクセスまたは変更できないことを意味しますか?

また、変数がグローバルで宣言されていてローカルに値が割り当てられている場合、この値はグローバルに表示されますか?

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

ページ上の他のスクリプトが4に設定されているaの値を参照することができるだろうか?

+1

注:関数内で 'a'を' var'で再宣言すると、ローカルになる第2の変数が作成され、最初の変数へのアクセスが隠されます。 'a = 4'を使用した場合、宣言された最初の値に値が設定されます。私はあなたもjavascript var hoistingについて読むことをお勧めします。 – 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 

我々はそれがグローバルにはaを宣言してアクセスanotherFunction()呼び出されると、それはmyFunctionからローカル変数aは表示されません。彼らは完全に異なっています。

このようにローカル変数を使用しない方が良いです。あなたがそれらを必要とする場合は、名前空間の役割を持っているでしょう1つのオブジェクトでより良いグループにそれら:

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

今、あなたはどこにもこのようなそれらにアクセスすることができます

console.log(allMyLocalVariables.a); 

確率彼らのことをあなたのオブジェクト/名前空間に賢明で意味のある名前を選んだ場合、他の変数と衝突する可能性は非常に低くなります。

+0

これには同意しません。グローバル変数を変更すると、そのグローバル値も変更され、アクセス可能です – Alexis

+0

グローバル変数は変更しません。 'myFunction'の変数' a'は、グローバル変数 'a'と同じではありません。 'a = 4'のような文を' var 'というキーワードなしで実行すると、別の話になります。 – cezar

+1

関数にvarを使用すると、グローバル変数を使用していないので、ローカル変数を定義しているだけで、グローバル変数は使用しません。 – Alexis

関連する問題