2 votes

Écouteur JS pour une variable globale ?

Je veux tout garder contenu dans une seule fonction, et ne pas rendre toutes les variables globales.

Est-il possible de configurer un écouteur d'événements dans la fonction principale pour surveiller une variable globale ?

dans cet exemple, appeler doTheStuff() quand l'indice est modifié ? ou est-ce que je m'y prends mal ?

var index = 0;

function main(data, data, data, data, data, data,) {

    function one() { two() }

    function two() { three() }

    function three() { }

    function doTheStuff() { }

}

1voto

T.J. Crowder Points 285826

Il y a probablement une meilleure façon de procéder, par exemple :

// Une fonction anonyme pour fournir une portée
(function() {
    var index = 0;  // Une variable non globale, mais accessible à tout ce qui est à l'intérieur de cette fonction de portée

    function setIndex(newIndex) {
        index = newIndex;
        faireLesChoses();
    }

    function one() { two(); }

    function two() { three(); }

    function three() {
        // Peut-être que `three` a besoin de changer l'index
        setIndex(index + 1);
    }

    function faireLesChoses() { }
})();

Si cela ne fonctionne pas pour ce que vous essayez de faire, vous pouvez mettre en place un minuteur d'intervalle et vérifier la valeur par rapport à une copie enregistrée.

var index = 0;
function principal(...) {
    var dernierIndex = index;

    setInterval(verifierIndex, 100); // Toutes les 100ms environ

    function verifierIndex() {

        if (index != dernierIndex) {
            dernierIndex = index;
            faireLesChoses();
        }
    }

    // Autres fonctions omises...

}

Il serait possible que index soit modifié plus d'une fois entre les intervalles ; cela dépendra de ce que vous essayez de faire.

À l'avenir, vous pourrez le faire avec des accesseurs et des mutateurs sur une propriété (partie de la nouvelle spécification ECMAScript 5), mais ce n'est pas encore largement implémenté. Certains navigateurs les implémentent, bien que avec leur propre syntaxe, mais d'autres ne le font pas (pas encore).

0voto

galambalazs Points 24393

Si vous ne possédez pas index, vous ne pouvez pas le faire de manière cross-browser. Si vous possédez index, vous pouvez créer des fonctions get/set pour gérer sa valeur.

Ou si vous n'avez pas besoin de travailler cross-browser, vous pouvez utiliser Getters and Setters dans Firefox, Safari 3+, Opera 9.5.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X