是“回归”在Node.JS中使用回调时是否必要/有用?

时间:2012-02-29 23:10:43

标签: javascript node.js

例如,这两者是否实际相同?

someFunction(val, callback){
    callback(val);
};

someFunction(val, callback){
    callback(val);
    return;  // necessary?
};

5 个答案:

答案 0 :(得分:8)

虽然它们是相同的,但您会不时看到以下内容:

someFunction(val, callback){
  if (typeof val != 'object')
    return callback(new Error('val must be an object'));
  callback(null, val);
};

换句话说,return用于提前“破解”函数。大多数情况下,我已经看到与条件一起使用;你测试一个错误条件(如果有错误则提前返回回调),然后避免必须将函数的其余部分包装在else子句中。

答案 1 :(得分:5)

是的,它们是一样的。如果你的函数没有返回一个值,那么你可以省略return语句或者在没有参数的情况下使用它;在这两种情况下,对函数的调用都返回“undefined”。

function f1(){};
typeof(f1()); // => "undefined"

function f2(){return;};
typeof(f2()); // => "undefined"

答案 2 :(得分:1)

在一般的JavaScript意义上,是的,它们是相同的 - 我不明白为什么node.js会有所不同。

在这两种情况下,someFunction()的返回值都为undefined。函数内是否有回调是无关紧要的。

答案 3 :(得分:1)

除了您不能拥有名为var的正式参数之外,您的两个片段是相同的并且以相同的方式工作。如果未指定,ECMAscript中的每个function隐含都会返回undefined

答案 4 :(得分:0)

他们是一样的;你应该使用return,因为把它放在那里会让读者感到困惑,因为它是不必要的。

sidenote :在某些语言(但可能不是javascript)中,如果启用了尾调用优化,则甚至可能无法执行return语句(也就是说,编译器删除函数是合理的如果你从未计划做任何事情,一旦你离开它就从堆栈中)。再一次,可能与标准javascript的任何实现都无关。