2011-04-15 1 views
1

Im un programmeur débutant qui a obtenu la fonction ci-dessous de Stoyan Stefanovs orienté objet JavaScript Book. Il dit que si vous appelez trois fois, il affichera "a" et "b" puis "c". Quand je l'ai essayé dans la console firebug, il me donnait toujours un "a", donc c'est une question (a) c'est-à-dire y a-t-il quelque chose à propos de firebug qui expliquerait mon résultat?Utilisation de Firebug et jsfiddle.net pour tester une fonction

Ensuite, j'ai essayé de l'exécuter dans jsfiddle.net mais il ne sortira rien. http://jsfiddle.net/mjmitche/SkSMm/

I m sure I Je fais quelque chose de mal, mais quoi? S'il vous plaît expliquer si vous le pouvez. Note, j'ai fait ensuite(); et a obtenu A, et ensuite je l'ai fait ensuite(); encore et a obtenu «un» et suivant(); encore et obtenu «un». En d'autres termes, le compteur ne s'est pas souvenu de t change or didn.

function setup(x) { 
    var i = 0; 
    return function() { 
     return x[i++]; 
    }; 
} 

var next = setup(['a','b','c']); 

next(); 
+0

mais vous avez seulement appelé next() une fois. essayez de l'appeler trois fois comme suivant(); prochain(); prochain(); et cela devrait montrer votre résultat attendu – corroded

Répondre

0

Vous l'avez fait mal: enter image description here

Et jsFiddle: http://jsfiddle.net/ZHgW2/

+0

Je ne vois pas de différence entre votre code et le mien. J'ai fait ensuite(); et a obtenu un «a» et a ensuite fait ensuite(); encore et obtenu «un». – mjmitche

+0

et aussi, qu'en est-il du violon que j'ai fait. Pouvez-vous expliquer cela? Je vous remercie. – mjmitche

+0

vous appelez fiddle 'next()', mais ne fait rien avec le résultat. La fonction fonctionne correctement, mais vous ne publiez pas le résultat n'importe où. –

1

jsFiddle est pas comme le console, il n'a pas de fenêtre où il va afficher les valeurs de retour. Le résultat du code est une page Web, qui est affichée en bas à droite.

Vous pouvez utiliser la méthode alert pour montrer les valeurs:

alert(next()); 

http://jsfiddle.net/SkSMm/4/

Comme vous le voyez, appelant next trois fois sera en fait sortir les trois valeurs dans le tableau. La fonction setup renvoie un délégué à la fonction anonium créée dans la fonction. Comme cette fonction anonyme utilise des variables en dehors de lui-même, mais qui sont locales à la fonction environnante, une fermeture est créée pour la fonction. La fermeture contiendra les variables i et x. Comme la fermeture appartient au délégué, elle survivra d'un appel de fonction au suivant et conservera les valeurs de ses variables.

Vous pouvez faire la même chose que l'utilisation de variables globales:

var x = ['a','b','c']; 
var i = 0; 

function next() { 
    return x[i++]; 
} 

alert(next()); 
alert(next()); 
alert(next()); 

Comme les variables sont déclarées en dehors de la fonction, ils survivront entre les appels de fonction. L'inconvénient de l'utilisation des variables globales est qu'un script se heurte facilement à un autre si les noms des variables ne sont pas vraiment uniques. Si vous utilisez une fermeture, il n'y a aucun risque que les variables d'un script entrent en conflit avec les variables d'un autre script.

0

Voici une démonstration intéressante qui profite d'un imported say function et repose sur un bouton:

http://jsfiddle.net/entropo/wxTqR/

C'est un excellent moyen de tester vos scripts sans compter sur le journal ou des alertes.

La fonction say provient de jQuery en action.Extrait:

Dans cette fonction, nous utilisons les services d'une petite fonction d'utilité, par exemple() C, que nous utilisons pour émettre des messages texte à un élément dynamique créé sur la page que nous appellerons la « console. "Cette fonction est déclarée dans le fichier de script de support importé (jqia2.support.js), et nous évitera d'avoir à utiliser des alertes ennuyeuses et perturbatrices pour indiquer quand les choses se passent sur notre page. Nous allons utiliser cette fonction pratique dans de nombreux exemples dans le reste du livre.
Questions connexes