Das liegt daran, dass Sie die Variable nach Wert übergeben, nicht durch Referenz.
In Javascript werden alle Variablen nach Wert übergeben, ausgenommen Objekte, die als Referenz übergeben werden (naja, sie werden auch als Wert übergeben, aber sie sind eine Referenz, siehe unten).
Und Sie können dieses Verhalten nicht ändern.
Bearbeiten: Wenn Sie nicht wissen, was nach Wert/Referenz bedeutet, sollten Sie ein Tutorial lesen. Aber hier haben Sie einige Beispiele:
Variable von Wert übergeben
function foo(bar){
console.log(bar); // 1
bar++;
console.log(bar); // 2
}
var mybar = 1;
console.log(mybar); // 1
foo(mybar);
console.log(mybar); // 1
Variable vorbeikam (Wert, sondern verwendet als) Referenz
function foo(bar){
console.log(bar.a); // 'b'
bar.a = 'c';
console.log(bar.a); // 'c'
}
var mybar = {a:'b'};
console.log(mybar.a); // 'b'
foo(mybar);
console.log(mybar.a); // 'c'
In Ihrem Fall
können Sie tun
Ihre Variable eine Eigenschaft eines Objekts Stellen (in Ihrem Fall, da es eine globale Variable verwenden window
) und das Objekt (Referenz) übergeben, so dass Sie es
verändern können window.that = 0;
function go(obj) {
obj.that++;
}
go(window);
console.log(that); // 1
Verwenden ein Rückgabewert
var that = 0;
function go(input) {
return input++;
}
that = go(that);
console.log(that); // 1
Beachten Sie, dass Sie nicht
Konvertieren Sie Ihre Variable in ein Objekt
var that = new Number(0); // Now it's an object number
function go(input) {
input++;
}
go(that);
that *= 1; // Now it's a literal number
console.log(that); // 0
Das ist, weil Objekte von Wert tun zu übergeben, aber sie sind eine Referenz. Das bedeutet, dass Sie innerhalb der Funktion die Eigenschaften des äußeren Objekts ändern können (weil es eine Referenz ist), aber Sie können das gesamte Objekt nicht ändern, da es nach Wert übergeben wird.
Siehe Beispiele hier: https://stackoverflow.com/a/3638034/1529630
Offtopic: Immer Ihre Variablen mit 'var' erklären. Oder, wenn es eine globale Variable ist, können Sie sie auch als eine Eigenschaft von 'window' festlegen (z. B.' window.that = 0') – Oriol