node js的callback()函数未定义?

4

你好,我刚接触 Node.js,尝试编写一个简单的回调函数,但出现了 "ReferenceError: sum1 is not defined" 的错误,请问有哪位可以帮忙解决吗? 代码:

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

然而,我尝试使用function sum1(a,b,callback){...}并且它有效。这是一个命名问题吗?有人能简单解释一下吗?

1
函数声明会被提升,而函数表达式则不会。 - Felix Kling
4个回答

9

在调用函数之前,您必须先定义该函数。当您使用以下形式时:

sum1 = function() {...} 

为定义函数,必须在使用该函数之前进行定义。这是因为函数直到代码行执行时才被分配给sum1变量。因此,如果您尝试在那行代码运行之前执行sum1(...),那么sum1尚未定义,您将收到异常。

如果您使用以下形式:

function sum1() {...}

然后,符号sum1在任何代码执行之前就已经在解析时定义了,因此文件中的放置顺序并不重要。


3

在调用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);
};

函数声明可以在调用代码之后。但是为了清晰起见,您应该始终在代码中使用它之前定义一个函数(无论哪种方式)。


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

这是一个函数表达式,因此在定义之前无法调用sum1(),请将其移至函数调用上方。

0

检查是否不在范围内.. 它的引用可能需要传递.. 我在 Protractor 中遇到了类似的问题,所以我不得不传递函数引用,然后就可以工作了.. ;)


这并没有回答问题。一旦您拥有足够的声望,您将能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自审核 - Vojin Purić

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接