2010-09-18 141 views
1

我有一個非工作代碼。我認爲它只需要一些小模塊,它應該工作。我無法弄清楚。剛開始學習JS。如何從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)); 

它不起作用。我得到「未定義」的錯誤。但是,如果我直接調用函數add ...

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

...我收到了期望的結果。函數try_it一定有問題嗎?

回答

4

這是因爲你的try_it()沒有返回一個值,而你的add()是。

嘗試這樣:

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 
} 

這將返回add()的結果。你得到undefined,因爲這是一個默認的返回值,當沒有指定。

編輯:更改它將結果存儲在一個變量,而不是立即返回。這樣你仍然可以發現錯誤。

+0

下面是Patrick說的一個例子:http://jsfiddle.net/2c2nt/ – Tudorizer 2010-09-18 17:10:18

相關問題