2015-12-02 66 views
2

你好我是新來的節點js,我試圖寫一個簡單的回調函數,但是得到「ReferenceError:sum1沒有定義」,任何人都可以幫助我嗎? 代碼:節點js callback()函數沒有定義?

sum1(1,2, function(sum){ 
    console.log(3 + sum); 
}); 
sum1 = function (a,b, callback){ 
    callback(a + b); 
}; 

不過,我試圖用 function sum1(a,b,callback){...} 和它的作品。這是一個命名問題嗎?任何人都可以解釋一下嗎?

+1

函數聲明*懸掛*,函數表達式不是。 –

回答

8

在調用它之前,您必須定義函數。當您使用以下形式:

sum1 = function() {...} 

來定義你的功能,在你使用的函數必須出現的定義。這是因爲在該行代碼執行之前,函數未分配給sum1變量。因此,如果您在該線路運行之前嘗試執行sum1(...),那麼sum1尚未定義,您將得到例外。

如果您使用以下形式:

function sum1() {...} 

然後,符號sum1在分析時被定義之前的任何代碼執行,因此文件中的放置順序是不是一個問題。

+0

謝謝!似乎我應該學習javascript更多 –

1
sum1 = function (a,b, callback){ 
    callback(a + b); 
}; 

這是一個函數表達式,所以你不能把它的定義之前調用sum1(),移動它的函數調用的上方。

2

你必須定義sum1調用它之前,或使用函數聲明:

// Define first: 
var sum1 = function (a,b, callback){ 
    callback(a + b); 
}; 
sum1(1, 2, function(sum) { 
    console.log(3 + sum); 
}); 

或者

// Function Declaration: 
sum1(1, 2, function(sum) { 
    console.log(3 + sum); 
}); 
function sum1(a,b, callback){ 
    callback(a + b); 
}; 

函數聲明可以在代碼中調用後。但是,爲了清楚起見,在代碼中使用它之前,您應該始終定義一個函數(無論哪種方式)。

+0

謝謝!你的代碼非常有幫助! –