2010-02-20 7 views
3

J'essaie d'apprendre JavaScript, mais j'ai rencontré un obstacle. Si la réponse est évidente et atteignable par une simple recherche, je m'excuse d'avance. Je suis novice en programmation et JavaScript, et je ne sais pas quelle ligne de conduite suivre.JavaScript: Lors de l'attribution d'une fonction anonyme à une variable, la valeur de retour de la fonction n'est pas passée, plutôt la fonction comme une chaîne

Dans le code suivant, la fonction prend des valeurs d'un formulaire HTML, effectue un traitement et les renvoie. J'ai testé le processus d'entrée et de sortie et cela fonctionne correctement.

function foo() { 

var x = parseInt(document.formdata.fieldone.value); 
var y = parseFloat(document.formdata.fieldtwo.value); 

if (isNaN(y)) 
    { var z = x; } 
else 
    { var z = function(x, y) { 
      if ((y * (x/100)) < 1) { 
       return (x + Math.ceil(y * (x/100))); } 
      else if ((y * (x/100)) > 1) { 
       return (x + Math.round(y * (x/100))); } 
      else { 
       return 0; } } } 

var bar = document.getElementById("output"); 

bar.innerHTML = z; } 

Le problème est, lorsque la branche else de l'instruction conditionnelle essaie de traiter la fonction anonyme, la valeur de retour n'est pas affecté; plutôt l'intégralité de la fonction en tant que chaîne. Autrement dit, celle-ci apparaît dans la page HTML:

fonction

(x, y) {if ((y * (x/100)) < 1) {return (x + Math.ceil (y * (x/100))); } else if ((y * (x/100))> 1) {return (x + Math.round (y * (x/100))); } else {return 0; }}

J'ai testé le code dans Chrome et Firefox et le résultat est le même.

Toute aide est appréciée et merci d'avance.

Répondre

12

Vous devez appeler la fonction en la faisant passer deux arguments, car sinon la variable z va simplement stocker une référence à cette fonction, mais il ne sera pas l'évaluer:

var z = (function(x, y) { 
    if ((y * (x/100)) < 1) { 
     return (x + Math.ceil(y * (x/100))); } 
    else if ((y * (x/100)) > 1) { 
     return (x + Math.round(y * (x/100))); } 
    else { 
     return 0; 
    } 
})(x, y); 

Notez que (x, y) utilisé dans l'anonymat La fonction n'est pas la même que celle passée en arguments à la fin qui correspondent aux deux variables déclarées au début de la fonction foo.

+0

Merci, appeler la fonction aide toujours :) – Omega

Questions connexes