2010-06-02 3 views
0

Voici la fonction et globals:comportement étrange réglage de délais d'attente dans une fonction avec des références mondiales en javascript

 $note_instance = Array(); 
     $note_count = 0; 

     function create(text){ 
     count = $note_count++; 

     time = 5000;    

     $note_instance[count] = $notifications.notify("create", text); 

     setTimeout(function(){ $note_instance[count].close() }, time); 
     } 

La fonction ouvre simplement une notification, un délai fixe un pour le fermer en 5 secondes.

donc si j'appelle cette

create("Good Note 1"); 
create("Good Note 2"); 
create("Good Note 3"); 

note Ecah doit fermer 5 secondes de leur création, mais toujours et seulement la dernière note ferme, dans ce cas, « bonne note 3 ». Chaque objet de note a sa propre entrée dans le tableau global $ note_instance, de sorte que les délais ne doivent pas être écrasés par eux-mêmes.

Qu'est-ce que je manque ici les gens? Merci d'avance

Répondre

2

count est une variable globale.

Vous devez le remplacer par une variable locale en ajoutant var count dans la fonction.

+0

Merci mon pote, ça a fait l'affaire. Mais comment se fait-il que 'count' soit dans la portée globale s'il n'a pas été déclaré en dehors de la fonction? – Pablo

+3

'count' n'a jamais été déclaré avec l'opérateur' var', il a juste été utilisé pour la première fois dans la fonction 'create', donc JavaScript suppose qu'il a une portée globale. – maerics

+0

Voilà comment cela fonctionne en JavaScript - si une variable n'est déclarée nulle part, c'est une variable globale. C'est une très mauvaise idée, mais c'est comme ça que le langage est conçu pour fonctionner. –

Questions connexes