【问题标题】:The significance of "return" in this Javascript code这段Javascript代码中“return”的意义
【发布时间】:2015-03-01 21:42:15
【问题描述】:

我是 Javascript 新手并遵循本教程:http://mcavage.me/node-restify/#Error-handling

 server.get('/hello/:name', function(req, res, next) {
  return database.get(req.params.name, function(err, user) { // Why call "return" here?
    if (err)
      return next(err);

    res.send(user);
    return next();
  });
});

第二行调用return 虽然我尝试不使用return,但它也有效。有人可以在这里阐明在这里调用“返回”的意义吗?谢谢。

根据@Pointy 的回答,我只想补充一点,问题假定“next()”函数不返回任何值。

【问题讨论】:

  • return 很重要,无论“next”是否返回值。

标签: javascript restify


【解决方案1】:

return 语句导致函数调用在该点退出。如果语句包含表达式,则函数将表达式的值返回给调用环境。

在这种情况下,第一行中的函数(if 语句)检测到错误,因此它将错误传递给它自己的回调(“next”参数引用的函数)。然后它返回该函数返回的任何内容。

如果没有该行上的return 语句,该函数的行为将有很大不同,因此没有它实际上不会“工作”。它有时可能会起作用,但由于该语句涉及错误处理,除非出现错误,否则您不会看到错误。

【讨论】:

  • 我明白了......所以如果我理解正确,假设“next()”没有返回任何东西(我认为它没有,查看文档),那么代码会显着没有return会有什么不同?
  • 是的,非常重要:return 语句会导致函数退出,而不执行其后面的任何语句。
  • 啊,我明白了...但是,由于return 是该函数体中的唯一语句,因此无论有没有它都没有任何区别,不是吗? (如果我固执/坚持但只是想确定我是否明白这一点,请道歉)。
  • 如果第一个if 测试是true,那么该函数将调用“next”并返回它返回的任何内容,并且它会这样做而不继续调用res.send(user)。这就是关键点:res.send(user)仅在第一个 if 失败时调用(也就是说,如果没有检测到错误条件)。如果有是错误,则函数返回而不调用res.send(user)。
  • @Pointy 你能澄清一下你说的是哪个return语句,其他return语句是否多余?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多