【问题标题】:Why use parentheses when returning in JavaScript?为什么在 JavaScript 中返回时使用括号?
【发布时间】:2013-12-29 11:14:52
【问题描述】:

在 Restify 框架代码中我找到了这个函数:

function queryParser(options) {

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

作者为什么要写return (next());return (parseQueryString);?那里需要括号吗?如果需要,为什么?

【问题讨论】:

标签: javascript


【解决方案1】:

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

React.js 提供了一个有用的示例。在组件中render 属性的返回语句中,出于可读性原因,您通常希望将返回的 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 本身不允许多行语句
  • @Callat 当然它允许多行表达式。您只是不能在 return 之后放置换行符,否则表达式将成为它自己的语句 - 仅此而已。
【解决方案2】:

不需要这样,但它是有效的 JavaScript 代码。实际上,这种语法很少见。我想这是作者的个人喜好。

【讨论】:

  • @silent_coder 在这种特殊情况下,它没有任何意义。通常,您可以看到用于括住代码中视觉上难以理解的部分的括号,即在使用复杂的三元运算符时。在上面的代码中,括号甚至可能会误导没有经验的开发人员,因为在这种情况下,return 看起来更像是一个函数调用。
  • 请叫我经验不足的开发人员,但有那么一会儿,这些括号引起了混乱,我做了一些搜索才弄明白,因为它看起来就像一个 函数调用 :)
  • 这通常是从 C++14 继承而来的语法;这只是一些程序员的约定。
  • 切勿在诸如 delete、typeof 和 void 之类的一元运算符或诸如 return、throw 以及其他关键字(case、in 或 new)之后使用括号。 google.github.io/styleguide/javascriptguide.xml
【解决方案3】:

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

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

() =&gt; ({ name: 'Amanda' }) // Shorthand to return an object

这相当于

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

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

【讨论】:

  • 非常注重箭头功能细节!
  • 需要注意的是,() =&gt; ({ name: 'Amanda' }) 中括号的使用并不是捷径:花括号内的代码被解析为语句序列
  • 是否允许在大括号中使用箭头函数或其中任何一个都需要使用括号?
【解决方案4】:
// Create a component named MessageComponent
var MessageComponent = React.createClass({
  render: function() {
    return (
      <div>{this.props.message}</div>
    );
  }
});

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

取自here

【讨论】:

    【解决方案5】:

    只是为了补充其他人所说的。

    在返回值周围使用方括号是有效的 JavaScript,但通常是一件坏事。

    主要是因为它没有添加任何内容,但会增加 JavaScript 的大小,这意味着有更多内容要下载到浏览器。是的,大多数人都有快速的宽带连接,但不要忽视这样一个事实,即您放入 JavaScript 文件中的所有内容都需要下载,以避免不必要的代码膨胀。如果你使用工具来压缩你的代码,这可能无关紧要(已经提到过缩小器),但不是每个人都这样做。

    有时它可能有助于提高可读性。在这种情况下很难想出一个例子,但是如果使用括号使您作为开发人员的 JavaScript 更清晰,从而更容易维护,那么请使用它们——即使它违背了我所说的代码膨胀。

    【讨论】:

      【解决方案6】:

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

      关于next()

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

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

      关于(xxx);

      没必要。每个 minifier 都会删除它。

      示例(uglifyJS):

      变成:

      【讨论】:

        【解决方案7】:

        我试过了:

        var a = function() {
                  return true || true
                }
        console.log(a());
        
        //return: true
        
        var a = function() {
                  return
                      true || true
                }
        console.log(a());
        
        //return: undefined
        
        var a = function() {
                  return (
                           true || true
                         )
                }
        console.log(a());
        
        //return: true
        

        【讨论】:

          【解决方案8】:

          这可能是旧的,但 return () 可以这样使用:

          function parseQueryString(req, res, next) {
                      var id = req.param('id');
                      return (id ? "Foo" : "Bar");
          }
          

          代码少,易读:)

          【讨论】:

            猜你喜欢
            • 2012-02-08
            • 2016-04-30
            • 1970-01-01
            • 2016-06-04
            • 1970-01-01
            • 1970-01-01
            • 2012-07-29
            • 2020-08-17
            • 1970-01-01
            相关资源
            最近更新 更多