web-dev-qa-db-fra.com

Est-ce que le retour arrête une boucle?

Supposons que j'ai une boucle comme celle-ci:

for (var i = 0; i < SomeArrayOfObject.length; i++) {

  if (SomeArray[i].SomeValue === SomeCondition) {

     var SomeVar = SomeArray[i].SomeProperty;
     return SomeVar;
  }
}

Question rapide: la return arrête-t-elle l'exécution de la boucle seule?

123
frenchie

Oui, return arrête l'exécution et quitte la fonction. return toujours ** quitte sa fonction immédiatement, sans autre exécution si elle se trouve dans une boucle for.

Il se vérifie facilement pour vous-même:

function returnMe() {
  for (var i=0; i<2; i++) {
    if (i === 1) return i;
  }
}

alert(returnMe());
// 1

** Notes: Voir cette autre réponse sur le cas particulier de try/catch/finally et cette réponse sur la manière dont les boucles forEach ont chacune leur propre fonction fonction contenant.

163
Michael Berkowski

Dans la plupart cas (y compris celui-ci), return quittera immédiatement. Cependant, si le retour est dans un bloc try avec un bloc finally, le finally est toujours exécuté et peut "écraser" le return dans le try .

function foo() {
    try {
        for (var i = 0; i < 10; i++) {
            if (i % 3 == 0) {
                return i; // This executes once
            }
        }
    } finally {
        return 42; // But this still executes
    }
}

console.log(foo()); // Prints 42
55
John Girata

L'instruction return arrête une boucle uniquement si elle se trouve à l'intérieur de la fonction. Sinon, vous obtiendrez cette erreur:

Uncaught SyntaxError: Illegal return statement(…)
7
Damjan Pavlica

Oui, une fois que l'instruction return est exécutée, la fonction entière est abandonnée à ce moment précis.

Imaginez simplement ce qui se passerait si ce n’était pas le cas et continuait de boucler et d’exécuter cette instruction return à chaque fois? Cela invaliderait sa signification de retourner une valeur quand on y réfléchit.

5
Keldon Alleyne

La réponse est oui, si vous écrivez une instruction return, les contrôles retournent immédiatement à la méthode de l'appelant. À l'exception de finally block, qui est exécuté après l'instruction return.

enfin, vous pouvez également remplacer la valeur que vous avez renvoyée si vous revenez à l’intérieur de block. LIEN: Précisions sur la tentative, la capture, le retour et le retour

Définition de l'instruction de retour selon:

Java Docs:

une instruction return peut être utilisée pour sortir d'un bloc de flux de contrôle et quitter la méthode

Documentation MSDN:

L'instruction return met fin à l'exécution d'une fonction et rend le contrôle à la fonction appelante. L'exécution reprend dans la fonction appelante au point qui suit immédiatement l'appel.

Wikipédia:

Une instruction return force l'exécution à quitter le sous-programme actuel et à reprendre à l'endroit du code immédiatement après l'appel du sous-programme, appelé adresse de retour. L'adresse de retour est enregistrée, généralement sur la pile d'appels du processus, dans le cadre de l'opération d'appel du sous-programme. Les instructions de retour dans de nombreuses langues permettent à une fonction de spécifier une valeur de retour à renvoyer au code qui a appelé la fonction.

1
user1179299

Ce code quittera la boucle après la première itération dans une boucle for of:

const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];
for (const iterator of objc) {
  if (iterator.name == 2) {
    return;
  }
  console.log(iterator.name);// 1
}

le code ci-dessous sautera sur la condition et continuera sur une boucle for of:

const objc = [{ name: 1 }, { name: 2 }, { name: 3 }];

for (const iterator of objc) {
  if (iterator.name == 2) {
    continue;
  }
  console.log(iterator.name); // 1  , 3
}
1
PersianIronwood

"return" quitte la fonction, mais si vous voulez renvoyer de grandes quantités de données, vous pouvez les stocker dans un tableau, puis les renvoyer au lieu d'essayer de renvoyer chaque élément de données 1 par 1 dans la boucle.

0
Brendon McBain