2010-09-18 12 views
1

J'ai un code qui ne fonctionne pas. Je pense qu'il faut juste un peu de mods et ça devrait marcher. Je ne pouvais pas comprendre. J'ai juste commencé à étudier JS.Comment invoquer une fonction d'une autre fonction en Javascript?

var add = function (a, b) { 
    if (typeof a !== 'number' || typeof b !== 'number') { 
     throw { 
      name: 'TypeError', 
      message: 'add needs numbers' 
     } 
    } 
    return a + b; 
} 

var try_it = function (a, b) { 
    try { 
     add(a, b); 
    } catch (e) { 
     document.writeln(e.name + ': ' + e.message); 
    } 
} 

document.writeln(try_it(2, 7)); 

Cela ne fonctionne pas. Je reçois une erreur "indéfinie". Cependant, si j'appelle la fonction ajouter directement ...

var add = function (a, b) { 
    if (typeof a !== 'number' || typeof b !== 'number') { 
     throw { 
      name: 'TypeError', 
      message: 'add needs numbers' 
     } 
    } 
    return a + b; 
} 

var try_it = function (a, b) { 
    try { 
     add(a, b); 
    } catch (e) { 
     document.writeln(e.name + ': ' + e.message); 
    } 
} 

document.writeln(add(2, 7)); 

... J'obtiens le résultat désiré. Quelque chose ne va pas avec la fonction try_it?

Répondre

4

C'est parce que votre try_it() ne renvoie pas de valeur, alors que votre add() l'est.

Essayez quelque chose comme ceci:

var try_it = function (a, b) { 
    var result; // storage for the result of add() 
    try { 
     result = add(a, b); // store the value that was returned from add() 
    } catch (e) { 
     document.writeln(e.name + ': ' + e.message); 
    } 
    return result; // return the result 
} 

Cela renverra le résultat de la add(). Vous obteniez undefined parce que c'est une valeur de retour par défaut quand on n'est pas spécifié.

EDIT: Modifié pour stocker le résultat dans une variable au lieu de retourner immédiatement. De cette façon, vous pouvez toujours attraper une erreur.

+0

Voici un exemple de ce que Patrick a dit: http://jsfiddle.net/2c2nt/ – Tudorizer

Questions connexes