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
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden