2017-05-10 6 views
0

Ist es sicherer, nur lokale Variablen in Ihrem JavaScript-Code zu verwenden?Sicherheit globaler gegen lokale Variablen?

Wie ich verstehe Variablen innerhalb der $(document).ready(function() {code here...} Block sind lokal erklärt. Bedeutet dies, dass sie von anderen Skripten nicht zugegriffen oder geändert werden können?

Wird eine Variable global deklariert, aber lokal zugewiesen, ist dieser Wert dann global sichtbar?

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

Werden andere Skripte auf der Seite der Lage sein, den Wert von a wird auf 4 zu sehen?

+1

Hinweis: Wenn Sie in der Funktion 'a' mit einem' var' deklarieren, wird eine zweite Variable erzeugt, die lokal ist und somit den Zugriff auf die erste Variable verdeckt. Wenn Sie 'a = 4 'verwendet hätten, hätte der Wert auf den ersten deklariert. Ich empfehle, dass Sie auch über Javascript var hissen lesen. – Kaddath

+0

Ja, ja, nein, nein. – Bergi

+0

Werfen Sie einen Blick auf diese http://stackoverflow.com/questions/10525582/why-are-global-variables-considered-bad-practice – Alexis

Antwort

1

Nein, die Variable a in Ihrer Funktion ist außerhalb des Funktionsumfangs nicht sichtbar. Wenn Sie versuchen, auf die Variable a an anderer Stelle im Code zuzugreifen, wird undefined angezeigt, weil Sie die Variable gerade deklariert haben, ihr aber keinen Wert zugewiesen haben.

Lassen Sie uns Ihr Beispiel erweitern:

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

Als wir anotherFunction() nannte es die globaly a erklärt zugegriffen wird, nicht die lokale Variable a von myFunction sieht. Sie sind völlig verschieden.

Es ist besser, auf diese Weise keine lokalen Variablen zu verwenden. Wenn Sie sie benötigen, sollten Sie besser gruppieren sie in ein Objekt, das die Rolle eines Namespace haben würde:

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

Jetzt können Sie sie überall wie folgt zugreifen:

console.log(allMyLocalVariables.a); 

und die Wahrscheinlichkeit, dass sie Mit anderen Variablen kollidieren ist sehr gering, wenn Sie einen sinnvollen und sinnvollen Namen für Ihr Objekt/Namespace gewählt haben.

+0

Nicht damit einverstanden. Wenn Sie die globale Variable ändern, ändert sich auch sein globaler Wert und ist zugänglich – Alexis

+0

Sie ändern die globale Variable nicht. Die Variable "a" in "myFunction" ist nicht die gleiche wie die globale Variable "a". Wenn Sie die Aussage so machen: 'a = 4', ohne das Schlüsselwort' var', wäre das eine andere Geschichte. – cezar

+1

Wenn Sie var für die Funktion verwenden, dann verwenden Sie nicht die globale Variable, Sie definieren nur eine lokale Variable und verwenden nicht die globale ... – Alexis