Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是";返回&引用;在Node.JS中使用回调时是否需要/有帮助?_Javascript_Node.js - Fatal编程技术网

Javascript 是";返回&引用;在Node.JS中使用回调时是否需要/有帮助?

Javascript 是";返回&引用;在Node.JS中使用回调时是否需要/有帮助?,javascript,node.js,Javascript,Node.js,例如,这两者实际上是相同的吗 someFunction(val, callback){ callback(val); }; 及 在一般JavaScript意义上,是的,它们是相同的-我不明白node.js为什么会有任何不同 在这两种情况下,someFunction()的返回值都将是未定义的。函数中是否有回调并不重要 是的,它们是一样的。如果函数不返回值,则可以省略return语句或不带参数使用它;在这两种情况下,对函数的调用都返回“undefined” 函数f1(){}; typeof

例如,这两者实际上是相同的吗

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


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


在这两种情况下,
someFunction()
的返回值都将是
未定义的
。函数中是否有回调并不重要

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

函数f1(){};
typeof(f1());//=>“未定义”
函数f2(){return;};
typeof(f2());//=>“未定义”

除了不能有一个名为
var的正式参数之外,您的两个代码片段是相同的,并且工作方式相同。ECMAscript隐式中的每个
函数
如果未指定,则返回
未定义的

它们是相同的;您不应该使用
return
,因为将它放在那里会让读者感到困惑,因为它是不必要的


旁注:在某些语言(但可能不是javascript)中,如果启用了尾部调用优化,甚至可能不会执行return语句(也就是说,如果您不打算做任何其他事情,编译器在离开堆栈后从堆栈中删除函数是合理的)。再一次,可能与标准javascript的任何实现都不相关。

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

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

换句话说,return用于提前“中断”函数。我经常看到它与条件句一起使用;测试错误条件(如果出现错误,则提前返回回调),然后避免将函数的其余部分包装在
else
子句中。

请注意,不能将名称“var”用作函数参数名称,因为“var”是关键字(声明变量)!您应该修改您的问题,并将“var”更改为“val”,或其他一些内容,以避免在答案=)Not true中挑剔-控制流将通过回调函数并返回到封闭函数(除非抛出异常),直到它到达“return”语句并退出该函数。因此,该语句是可访问的(即,它不是死代码),它只是不做任何事情@抱歉,我最近做了太多的高级回调编程。控制是否返回到此函数取决于语言语义是否允许使用语言堆栈的尾部调用优化。我怀疑javascript的情况是否如此,所以谢谢,我将编辑我的答案。啊,有趣的想法。无论如何,是的,好吧,ECMAScript不需要消除尾部调用,而且我认为任何口译员都不会这样做。
someFunction(val, callback){
  if (typeof val != 'object')
    return callback(new Error('val must be an object'));
  callback(null, val);
};