2010-12-07 33 views
7

Comment puis-je utiliser javascript retourComment puis-je utiliser javascript retour

function hello1() { 

    function hello2() { 

     if (condition) { 
      return; // How can I exit from hello1 function not hello2 ? 
     } 

    } 

} 
+0

vous voulez dire quitter de hello2 pas bonjour1 –

+0

Je veux quitter exit1 – faressoft

+2

Je suppose que cela dépend de la façon dont vous appelez bonjour2, bonjour2 ne peut pas être exécuté jusqu'à ce que vous ayez un objet de retour de bonjour1. Je pense que vous allez devoir afficher un exemple plus précis de ce que vous essayez d'accomplir au lieu d'une pseudo question. – superfro

Répondre

15

Vous ne pouvez pas. Ce n'est pas comme cela que fonctionne le return. Il ne sort que de la fonction actuelle. Le fait de pouvoir retourner d'une fonction plus loin dans la pile d'appel briserait la encapsulation offerte par la fonction (c'est-à-dire qu'elle ne devrait pas avoir besoin de savoir d'où elle est appelée, et ce devrait être à l'appelant de décider quoi faire si la fonction échoue). Une partie du but d'une fonction est que l'appelant n'a pas besoin de savoir comment la fonction est implémentée.

Qu'est-ce que vous voulez sans doute est quelque chose comme ceci:

function hello1() { 
    function hello2() { 
     if (condition) { 
      return false; 
     } 
     return true; 
    } 

    if (!hello2()) { 
     return; 
    } 
} 
2

Vous ne devriez pas utiliser-fonctions internes pour contrôler le déroulement du programme. La capacité d'avoir des fonctions internes favorise le contexte et l'accessibilité.

Si votre fonction externe repose sur sa fonction interne pour une certaine logique, utilisez simplement sa valeur de retour pour procéder en conséquence.

2

sauter la pile comme ça est probablement une mauvaise idée. vous pourriez le faire avec une exception. Nous contrôlons le flux d'exécution de la même manière en un point de travail, car il s'agit d'une solution de contournement simple pour un code mal conçu.

+1

Même avec des exceptions, l'une des fonctions les plus hautes de la pile d'appels peut le gérer. Cela nécessiterait que chaque appel de fonction à 'hello1' soit enveloppé dans un bloc' try ... catch' ... un peu désordonné ;-) – Cameron