JS lambda默认返回值

时间:2018-11-11 14:46:26

标签: javascript node.js lambda return-value default

我对node.js中lambdas的默认返回值有些困惑。我找到了此链接"Arrow Functions"

  

箭头功能可以具有“简洁主体”或通常的“块”   身体”。

     

在简洁的正文中,仅指定一个表达式,该表达式成为   隐式返回值。在块体中,必须使用显式   返回声明。

var func = x => x * x;                  
// concise body syntax, implied "return"

var func = (x, y) => { return x + y; }; 
// with block body, explicit "return" needed

这很清楚,但是随后我遇到了这段经过测试的Express代码,该代码默认情况下返回最后一条语句,而无需使用“ return”:

const express = require('express');
const app = express();

app.use('/api/posts', (req, res, next) => {
  const posts = [
    {
      id: 'sdfj234j654j',
      title: 'First server-side post',
      content: 'This is comming from the server'
    },
    {
      id: '9054jk4ju59u90o',
      title: 'Second server-side post',
      content: 'This is comming from the server!'
    }
  ];
  // this is returned by default and does not require "return "
  res.status(200).json({
    message: 'Posts fetched succesfully!',
    posts: posts
  });
});

那么当我使用块引号定义或不定义它们时,我需要在lambda上使用return语句吗?还是有一个我不知道的例外情况?

2 个答案:

答案 0 :(得分:1)

示例中的arrow函数不返回任何内容。但是,它会通过调用res来写入.json({ /*...*/})响应,因此有点将json“返回”给客户端。

一个简化的示例:

  setTimeout(() => {
    console.log("test");
  }, 1);

尽管箭头功能没有返回任何内容,但是上面的代码向控制台输出了一些内容。

答案 1 :(得分:0)

我相信您标记为“默认情况下已返回”的内容实际上并没有得到返回。该函数返回public List<Point> getUniq() { List<Point> l = new ArrayList<>(); for (int i = 0; i < pointList.size()-1; i++) { if (pointList.get(i).equals(pointList.get(i + 1))) { l.add(pointList.get(i)); } } return l; } ,就像没有return语句的任何函数一样。在undefined中,发生的事情是,只要遇到特定的路由,就调用函数,仅此而已。 app.use仅写入网络,并且不返回任何值。