为什么在 JavaScript 中返回时使用括号?

IT技术 javascript
2021-03-16 20:01:09

在 Restify 框架代码中,我发现了这个函数:

function queryParser(options) {

    function parseQueryString(req, res, next) {
        // Some code goes there
        return (next());
    }
    return (parseQueryString);
}

作者为什么要写return (next());return (parseQueryString);它是否需要括号,如果需要,为什么?

6个回答

如果您想将return 语句写成多行,则在返回时使用括号是必要的

React.js提供了一个有用的例子。render组件中属性的 return 语句中,出于可读性原因,您通常希望将返回的 JSX 分布在多行中,例如:

render: function() {
    return (
        <div className="foo">
            <h1>Headline</h1>
            <MyComponent data={this.state.data} />
        </div>
    );
}

没有括号会导致错误!


更一般地,在将 return 语句分散到多行时不使用括号会导致错误。以下示例将正确执行

var foo = function() {
  var x = 3;
  return (
    x 
    + 
    1
  );
};
console.log(foo());

而以下(不带括号)会抛出错误

var foo = function() {
  var x = 3;
  return 
    x 
    + 
    1
  ;
};
console.log(foo());

这应该是公认的答案。Return 本身不允许多行语句
2021-04-27 20:01:09
@Callat 当然它允许多行表达式。您只是不能在 之后立即放置换行符return,否则表达式将成为它自己的语句 - 仅此而已。
2021-05-19 20:01:09

它不需要那样,但它是有效的 JavaScript 代码。实际上,这种语法并不常见。估计是作者个人喜好吧。

称我为缺乏经验的开发人员,但有一段时间这些括号引起了混乱,我进行了一些搜索以弄清楚它看起来与函数调用完全一样:)
2021-04-29 20:01:09
这通常是从 C++14 继承下来的语法,它确实有影响,或者是从 C 是当时流行的语言时代的老派程序员那里继承来的这只是一些编码人员的约定。
2021-05-01 20:01:09
切勿对一元运算符(例如 delete、typeof 和 void)或 after 关键字(例如 return、throw 以及其他(case、in 或 new))使用括号。google.github.io/styleguide/javascriptguide.xml
2021-05-06 20:01:09
@silent_coder 在这种特定情况下,它没有用。通常,您可以看到括号用于包含视觉上难以理解的代码部分,即在使用复杂的三元运算符时在上面的代码中,对于没有经验的开发人员来说,括号甚至可能会产生误导,因为这种情况下的return看起来更像是一个函数调用。
2021-05-13 20:01:09

在 return 语句中,括号有两个用途。

  • 支持@Andru Answer 中提到的多行表达式。
  • 允许在箭头函数中返回对象,如下所示:

() => ({ name: 'Amanda' }) // Shorthand to return an object

这相当于

() => {
 return { name : 'Amanda' }
}

有关更多信息,请查看这篇文章。 https://medium.com/@leannezhang/curly-braces-versus-parenthesis-in-reactjs-4d3ffd33128f

非常注重箭头函数的细节!
2021-05-02 20:01:09
需要注意的是,() => ({ name: 'Amanda' }) 在使用括号时不是捷径:大括号内的代码被解析为语句序列
2021-05-16 20:01:09
是否允许在大括号内使用括号 wrt 箭头函数或需要使用它们中的任何一个?
2021-05-18 20:01:09
// Create a component named MessageComponent
var MessageComponent = React.createClass({
  render: function() {
    return (
      <div>{this.props.message}</div>
    );
  }
});

注意 为什么我们需要在 return 语句(第 3 行)周围加上括号?这是因为 JavaScript 的自动分号插入。如果没有括号,JavaScript 将忽略以下行并返回没有值。如果 JSX 与返回在同一行开始,则不需要括号。

取自这里

作者为什么要写return(next()); ……?

关于next()

可能是因为他的功能是这样的:

function next()
{
  var i=0;
  return function (){
    // Do something with that closured i....
  }
}

关于(xxx);

这是不必要的。每个压缩器都会删除它。

示例(uglifyJS):

在此处输入图片说明

变成:

在此处输入图片说明