Globale Variablen werden als schlechte Praxis angesehen, aber ich möchte sie als eine Art einfacher "Singleton" -Wert verwenden.node.js: Wie setze ich eine globale Variable aus einer anonymen Funktion?
Das folgende enthält drei verschiedene Arten der Deklaration von Variablen in einem globalen Bereich in NodeJS (glaube ich). Die Funktion change2() kann ihre Werte von "... eins" auf "... zwei" ändern. Mit der Funktion change3() ist es jedoch nicht möglich, sie auf "... drei" zu setzen.
Wie kann ich den Wert einer globalen Variablen innerhalb einer anonymen Funktion ändern? - Ich habe auch versucht, eine Setter-Methode ohne Wirkung aufzurufen. Der Aufruf von bind() ist nur eine hilflose Schätzung.
global.v1 = 'v1: one';
var v2 = 'v2: one';
v3 = 'v3: one';
function change2() {
global.v1 = 'v1: two';
v2 = 'v2: two';
v3 = 'v3: two';
};
function change3() {
(function() {
global.v1 = 'v1: three';
v2 = 'v2: three';
v3 = 'v3: three';
}).bind({v1:v1, v2:v2, v3:v3});
};
console.log (v1, v2, v3);
change2();
console.log (v1, v2, v3);
change3();
console.log (v1, v2, v3);
Ausgabe lautet:
O:\node>node scope
v1: one v2: one v3: one
v1: two v2: two v3: two
v1: two v2: two v3: two
O:\node>
keine direkte Antwort, aber eine Datei "v1.js" mit dem Inhalt 'module.exports = {}' funktioniert sogar noch besser für ein einfaches Singleton. dann einfach 'require ('./ v1')' in deinen anderen Modulen. –
In 'change3()' führen Sie niemals die interne Funktion aus. '.bind()' gibt nur eine neue Funktion zurück, die Sie aber nie aufrufen. – jfriend00
Danke @ jfriend00 für die Erkennung. Das Ersetzen von '.bind (...)' mit nur '()' löste den Aufruf aus und "... three" wurde gesetzt. –