NEWS
[GELÖST]Variablen außerhalb einer Funktion?
-
Anfängerfrage:#
Sollte es nicht möglich sein Variablen außerhalb von function zu deklarieren, und diese dann in einer function zu benutzen?
das geht nicht, es funktioniert nur so…
createState('zustände.fenstererd', 0); var timere = null; //Function zur Abfrage der Zustände function zustanderd() { var b = getState("hm-rpc.0.MEQ0751783.1.STATE").val;//Stube rechts var c = getState("hm-rpc.0.MEQ0751896.1.STATE").val;//Stube mitte var d = getState("hm-rpc.0.MEQ0752856.1.STATE").val;//Stube links if(b || c || d) { if (!timere) { timere = setTimeout(function () { timere = null; setState('zustände.fenstererd', 1); toLog("Fenster Erdgeschoss geöffnet!", true); }, 1000);//eine Sekunde Verzögerung } } else { if (timere) { clearTimeout(timere); timere = null; } setState('zustände.fenstererd', 0); toLog("Fenster Erdgeschoss geschlossen!", true); } } // Bei Änderrung der Zustände aufruf der Functionen //*******************ERDGESCHOSS************************** on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function() { zustanderd(); }); on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function() { zustanderd(); }); on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function() { zustanderd(); });
wobei die "timere" Variable funktioniert.
-
So funktioniert es auch und ist die bessere Lösung (geringere CPU-Belastung):
var timere = null; var b; var c; var d; //Function zur Abfrage der Zustände function zustanderd() { if(b || c || d) { if (!timere) { timere = setTimeout(function () { timere = null; setState('zustände.fenstererd', 1); toLog("Fenster Erdgeschoss geöffnet!", true); }, 1000);//eine Sekunde Verzögerung } } else { if (timere) { clearTimeout(timere); timere = null; } setState('zustände.fenstererd', 0); toLog("Fenster Erdgeschoss geschlossen!", true); } } // Bei Änderrung der Zustände aufruf der Functionen //*******************ERDGESCHOSS************************** on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function(dp) { b = dp.newState.val; zustanderd(); }); on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function(dp) { c = dp.newState.val; zustanderd(); }); on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function(dp) { d = dp.newState.val; zustanderd(); });
-
Perfekt!
Viel weniger Schreibaufwand!
Aber eine Erklärung steht noch aus, warum man nicht getState() außerhalb einer Funktion an einer Variable übergeben kann und diese dann in der Funktion benutzen? :oops:
-
…warum man nicht getState() außerhalb einer Funktion an einer Variable übergeben kann und diese dann in der Funktion benutzen? `
Die Programmteile außerhalb der Funktion werden nur einmal bei Scriptstart ausgeführt. Die per getState() außerhalb der Funktion eingelesenen Werte würden sich also nie wieder ändern (außer bei erneutem Scriptstart).Will man sich ändernde Werte einlesen, muss man das innerhalb der durch on(id, function) aufgerufenen Funktion(en) machen.
-
Okay…..jetzt hab ich es verstanden. Danke :!:
-
Möchte man sofort nach Scriptstart ein gültges Ergebnis, dann deklariert man die Variablen nicht nur außerhalb der Funktion, sondern initialisiert sie auch und führt die Funktion bei Scriptstart aus:
// Deklaration und Initialsierung von Variablen var timere = null; var b = getState("hm-rpc.0.MEQ0751783.1.STATE").val;//Stube rechts var c = getState("hm-rpc.0.MEQ0751896.1.STATE").val;//Stube mitte var d = getState("hm-rpc.0.MEQ0752856.1.STATE").val;//Stube links //Function zur Abfrage der Zustände function zustanderd() { if(b || c || d) { if (!timere) { timere = setTimeout(function () { timere = null; setState('zustände.fenstererd', 1); toLog("Fenster Erdgeschoss geöffnet!", true); }, 1000);//eine Sekunde Verzögerung } } else { if (timere) { clearTimeout(timere); timere = null; } setState('zustände.fenstererd', 0); toLog("Fenster Erdgeschoss geschlossen!", true); } } // Bei Änderrung der Zustände aufruf der Functionen //*******************ERDGESCHOSS************************** on({id: "hm-rpc.0.MEQ0751783.1.STATE"}, function(dp) { b = dp.newState.val; zustanderd(); }); on({id: "hm-rpc.0.MEQ0751896.1.STATE"}, function(dp) { c = dp.newState.val; zustanderd(); }); on({id: "hm-rpc.0.MEQ0752856.1.STATE"}, function(dp) { d = dp.newState.val; zustanderd(); }); // Scriptstart mit Initialwerten zustanderd();
-
Hi,
das unterstreicht das, was du vorher erklärt hast. Danke