2015-12-02 43 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

谢谢!你的代码非常有帮助! –