2010-10-13 9 views
3

donné est le code suivant:Laisser une fonction "retourner" la super fonction?

function two() { 
    return "success"; 
} 

function one() { 
    two(); 
    return "fail"; 
} 

Si vous testez le code en appelant une fonction(), vous obtiendrez toujours « échec ». La question est, comment puis-je retourner "succès" dans la fonction un() en appelant seulement la fonction deux()?

Est-ce encore possible?

Cordialement

+2

@Paniyar S'il ne le comprend pas, il ne le comprend pas. Juste parce que c'est simple pour vous ne signifie pas que c'est universellement simple. – mattbasta

Répondre

6

Vous ne pouvez pas faire un retour de la fonction de la fonction qui l'a appelé en Javascript (ou bien d'autres langues, AFAIK). Vous avez besoin de logique dans un() pour le faire. Par exemple:

function one() { 
    return two() || "fail"; 
} 
+0

C'est faux, "succès" || "fail" échouera, aucun n'est booléen – smirkingman

+4

Ce n'est pas faux. Selon les règles de JavaScript, telles qu'écrites par les Anciens du Web, un opérateur or ('||') retournera le premier argument s'il n'évalue pas à une valeur 'falsy' (par exemple, faux, indéfini, nul, 0 , ""), sinon il va évaluer et retourner son deuxième argument. – andrewmu

+1

@smirkingman En fait, vous avez tort. Une chaîne évalue à une vraie valeur booléenne dans JS. Punch '" succès "|| "fail" 'dans n'importe quelle console JS et il retournera" "succès" '. Sachez de quoi vous parlez avant de critiquer la réponse de quelqu'un. – mattbasta

6
function one() { 
    return two(); 
} 
2

Vous pouvez le faire, à l'aide d'un bloc try-catch, si votre fonction à anticipe une probable non-retour local ainsi que fonction à deux comme ces exceptions en utilisant:

function two() { 
    throw {isReturn : true, returnValue : "success"} 
} 


function one() { 
    try { 
    two() 
    } catch(e) { 
    if(e.isReturn) return e.returnValue; 
    } 
    return "fail"; 
} 

, je crois.

Questions connexes