2017-01-28 1 views
0

Pourquoi results = array [0] ou 1 et non array [1] ou 2 lorsque le callback console.logs résulte?Variable de rappel et d'incrémentation

function test(array, callback) { 
     var startingIndex = 0; 

     var result = array[startingIndex]; 

     startingIndex++; 

     callback(result); 

    } 

     test([1, 2, 3], function(result) { 
      console.log(result); 
    }); 
+0

Vous vous confondre avec la complication supplémentaire de la fonction de rappel. Si vous faites un 'console.log (result)' où l'appel 'callback (result)' est maintenant, vous verrez le même résultat. Une partie de l'art du débogage est de simplifier et de simplifier un peu plus, et de ne pas être distrait par des choses qui ne sont pas liées au problème. De plus, savez-vous comment utiliser le débogueur JavaScript dans votre navigateur? Si vous parcourez le code ligne par ligne dans le débogueur, vous verrez immédiatement ce qui se passe. Voici une introduction au [Chrome DevTools] (https://developer.chrome.com/devtools). –

+0

J'ai utilisé le débogueur Chrome sans le rappel et un fichier console.log (résultat) à l'intérieur de la fonction et quand il arrive à startingIndex ++, startingIndex est mis à jour de 1 à 0 mais cela n'a aucun effet sur le résultat. Il reste à 1..still confus sur pourquoi le résultat n'est pas mis à jour avant le console.log. Je ne sais pas ce que je manque. – norkuy

+0

JavaScript exécute votre instruction de code par une instruction dans l'ordre où vous l'écrivez. 'result' et' startingIndex' sont deux variables différentes. Changer un n'affecte pas l'autre. –

Répondre

2

C'est parce que vous incrémentez la variable startingIndexavant la variable attribuer result.

Vous avez:

var result = array[startingIndex]; 
startingIndex++; 

Swap ces deux lignes et vous obtiendrez le résultat escompté:

startingIndex++; 
var result = array[startingIndex];