我对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语句吗?还是有一个我不知道的例外情况?
答案 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
仅写入网络,并且不返回任何值。