2010-09-28 5 views
2

Je veux garder tout contenu dans une seule fonction, et ne pas rendre toutes les variables globales.JS écouteur pour global var?

Est-il possible de configurer un écouteur d'événements dans la fonction main pour regarder une var globale?

Dans cet exemple, appelez doTheStuff() lorsque l'index est modifié? ou pourrais-je aller à ce sujet dans le mauvais sens?

var index = 0; 


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

function one(){ two() } 

function two(){ three() } 

function three(){ } 

function doTheStuff(){ } 

} 

Répondre

1

Il y a probablement une meilleure façon d'aller à ce sujet, par exemple:

// An anonymous function to provide scoping 
(function() { 
    var index = 0; // A non-global, but accessible to everything within this scoping function 

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

    function one() { two(); } 

    function two() { three(); } 

    function three() { 
     // Perhaps `three` needs to change the index 
     setIndex(index + 1); 
    } 

    function doTheStuff() { } 
})(); 

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

var index = 0; 
function main(...) { 
    var lastIndex = index; 

    setInterval(checkIndex, 100); // Every 100ms or so 

    function checkIndex() { 

     if (index != lastIndex) { 
      lastIndex = index; 
      doTheStuff(); 
     } 
    } 

    // Other functions omitted... 

} 

Il serait possible pour index à changer plus d'une fois entre les intervalles; si cela dépend de ce que vous essayez de faire. À l'avenir, vous pourrez le faire avec des getters et des setters sur une propriété (qui fait partie de la nouvelle spécification ECMAScript 5), mais cela n'est pas encore largement implémenté. Certains navigateurs les implémentent, bien qu'avec leur propre syntaxe, mais d'autres ne le font pas (encore).

0

Si vous ne possédez pas index vous ne pouvez pas le faire de manière croisée. Si vous possédez index vous pouvez faire get/set fonctions pour faire face à sa valeur.

Ou dans le cas où vous n'avez pas besoin de travailler par navigateur, vous pouvez utiliser Getters et Setters dans Firefox, Safari 3+, Opera 9.5.