2017-08-04 2 views
2

Heyo, kann mir jemand erklären, warum dieser Code nicht funktioniert, wenn die Variable 'weiß' in der Funktion ist?Variable kann nicht innerhalb der Funktion sein

var button = document.querySelector("button"); 
var body = document.querySelector("body"); 
var white = true; 

button.addEventListener("click", function() { 
    if (white) { 
    body.style.backgroundColor="pink"; 
    } else { 
    body.style.backgroundColor="white"; 
    } 
    white = !white; 
}); 
+0

Verstehen Sie den variablen Bereich? – Carcigenicate

+2

Es funktioniert, aber es wird immer bei jedem Klick als 'wahr' definiert. So wird der Code der meisten Funktion nie passieren – Anarion

+1

Mögliches Duplikat von [Was ist der Umfang der Variablen in JavaScript?] (Https://stackoverflow.com/questions/500431/what-is-the-scope-of-variables-in -javascript) –

Antwort

2

In diesem Fall:

var button = document.querySelector("button"); 
 
var body = document.querySelector("body"); 
 
var white = true; 
 

 
button.addEventListener("click", function() { 
 
    if (white) { 
 
    body.style.backgroundColor="pink"; 
 
    } else { 
 
    body.style.backgroundColor="white"; 
 
    } 
 
    white = !white; 
 
});
<button>Click</button>

Sie die globale Variable ändern white und nach Funktionsausführung wird es true oder false sein, so dass die Funktion die Farbe zu einem anderen auslösen (wenn es weiß war, wird es nach dem Klick rosa und umgekehrt).

Aber in diesem Fall:

var button = document.querySelector("button"); 
 
var body = document.querySelector("body"); 
 

 
button.addEventListener("click", function() { 
 
    var white = true; 
 
    if (white) { 
 
    body.style.backgroundColor="pink"; 
 
    } else { 
 
    body.style.backgroundColor="white"; 
 
    } 
 
    white = !white; 
 
});
<button>Click</button>

Alle lokalen Funktionsvariablen entfernt werden, nachdem die Funktionsausführung beendet ist. Ihre white Variable ist immer true auf Funktion Start, so dass die erste if Anweisung jedes Mal funktioniert (ändert den Hintergrund nur rosa).

Verwandte Themen