Ich schreibe eine Javascript-App, wo ich auf meine Anwendungsvariablen auf globaler Ebene zugreifen möchte. Etwas wie folgt aus:Javascript Zugriff Mitglied Variablen durch Referenz
//Initialize
var myApp=new app();
//Count is zero here, as expected since app is asynchronous
console.log(myApp.count);
//But 5 seconds later, count should have a non-zero value
setTimeout(function(){
console.log(myApp.count);
}, 5000);
Und der Anwendungscode:
//Application code
function app() {
var count=0;
setTimeout(function(){
console.log("Setting count to 10");
count=10;
}, 2500);
//Member variable for count
this.count=count;
}
die jsfiddle Siehe hier: https://jsfiddle.net/o4db2ep4/
Was ich will, ist für den ersten Zugriff des Grafen Null zu sein, aber die zweite sollte 10 sein.
Ich denke, was passiert ist, dass zu der Zeit, die ich myApp deklariere, erhält es den Wert für die Zählung als Null . Es ist wie ein Wert-Referenz-Problem, kombiniert mit einem Scope, und ich habe damit zu kämpfen.
Wie kann ich einen Verweis auf app.count erhalten, der dynamisch ist, d. H. Immer die aktuellen Werte von count und nicht den Wert zum Zeitpunkt der Zuweisung enthält? Wenn dies nicht möglich ist, wie sollte ich dieses Problem überdenken?
'setTimeout' Pause nicht das Skript. Es plant nur die Funktion, die Sie bereitstellen, damit es später ausgeführt wird, also wird 'this.count = count' ausgeführt, lange bevor der' setTimeout' Callback ausgeführt wird. –
Ja, das verstehe ich. Wenn jedoch app.count ein Zeiger auf this.count ist, verweisen sie immer auf die gleichen Werte, unabhängig davon, wann sie ausgeführt werden. – jrel
JavaScript ist streng pass/zuweisen nach Wert. Eine Variable/Eigenschaft kann nicht auf eine andere Variable/Eigenschaft verweisen. –