2010-02-20 27 views
3

我正在嘗試學習JavaScript,但遇到了一個障礙。如果答案顯而易見並且通過簡單搜索可以達到,我提前致歉。我是編程和JavaScript的新手,並且不確定要遵循哪些查詢。JavaScript:當給一個變量賦值一個匿名函數時,函數返回值沒有被傳遞,而是函數作爲一個字符串

在下面的代碼中,該函數從HTML表單獲取值,執行一些處理並將其發回。我測試了輸入和輸出過程,並且它正常工作。

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; } 

問題是,當條件語句的else分支試圖處理匿名函數時,返回值沒有賦值;而是整個函數作爲一個字符串。即,在HTML頁中的出現以下內容:

函數(X,Y){如果((Y *(X/100))< 1){返回(X + Math.ceil(Y *( x/100))); } else if((y *(x/100))> 1){return(x + Math.round(y *(x/100))); } else {return 0; }}

我測試了Chrome和Firefox中的代碼,結果是一樣的。

任何幫助表示讚賞,並提前感謝您。

回答

12

您需要通過傳遞兩個參數來調用函數,因爲否則z變量將只存儲這個函數的引用,但它不會評價它:

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); 

注意的是,匿名內部使用(x, y)函數與在末尾傳遞的參數不同,後者與foo函數開頭聲明的兩個變量相對應。

+0

謝謝你,調用函數總是幫助:) – Omega 2010-02-20 11:05:43

相關問題