Wie manipuliert JS-Engine nicht deklarierte Variable?
<!DOCTYPE html>
<html>
<head>
<meta lan="en-us" charset="UTF-8">
</head>
<body>
<p>Counting with a local variable.</p>
<p id="demo"></p>
<button type="button" onclick="myFunction('+')">Count +</button>
<button type="button" onclick="myFunction('-')">Count -</button>
<script>
document.getElementById("demo").innerHTML = 0;
function add(number){
var counter = 0;
return function() {return counter += number;}
}
function sub(number){
var counter = 0;
return function() {return counter -= number;}
}
var counterIncr = add(1);
var counterDicr = sub(1);
function myFunction(s){
if(s == "+"){
/*this.*/counter1 = counterIncr();
}
else if (s == "-"){
/*this.*/counter2 = counterDicr();
}
if(!counter2 && counter1){
document.getElementById("demo").innerHTML = counter1;
}
else if(!counter1 && counter2){
document.getElementById("demo").innerHTML = counter2;
}
else if(counter1 && counter2){
document.getElementById("demo").innerHTML = (counter1 + counter2);
}
}
</script>
</body>
</html>
Während meiner Studie über JS Schließungen habe ich ein W3C Beispiel erweitert, eine HTML-Seite mit zwei Tasten zu implementieren. Das Beispiel hat nur einen Knopf. Die erste Schaltfläche erhöht den Zähler-Klick und die zweite Schaltfläche verringert den Zähler. Eine Funktion "myFunction" wird definiert, die zwei Variablen "counter1" und counter2 "verwendet, um den Job auszuführen. Diese Variablen wurden als this.counter1 und this.counter2 deklariert und die Implementierung dieser Seite funktioniert wie erwartet. Meine Frage: Wenn ich "this" von counter1 und counter2 declaration weglasse (... nur zum Spaß) funktioniert meine Seite immer noch (sicher nicht im strikten Modus) aber nur wenn beide Buttons einmal angeklickt wurden. Wie könnte dieses Verhalten erklärt werden oder wie funktioniert JS? ? Motor manipuliert (behandelt) nicht deklarierten Variablen unter der Haube
Könnte die schlampig Modus irgendwie erklären, warum Die Seite zeigt den korrekten (nach Klicks) Wert des Zählers an, nachdem beide Tasten einmal angeklickt wurden. Warum verhält sich die Seite so, als würde sie keine ersten Klicks "fühlen"? – Gfour