【问题标题】:Difference between return[] and return() [duplicate]return[] 和 return() 之间的区别 [重复]
【发布时间】:2013-06-09 12:30:17
【问题描述】:
<script>
 function makeArray(arg1, arg2){  
        return [ this, arg1, arg2 ];  
    }   
    alert(window.makeArray('one', 'two'));
</script>

问题:

上面脚本的输出是:[Object Window], one, two, If I changed return [ this, arg1, arg2 ];返回 (this, arg1, arg2);输出是:两个。那么return[]和return()有什么区别呢?

【问题讨论】:

  • @DCoder:别无礼。如果您是 JavaScript 程序员新手,这些事情可能会感觉很微妙。
  • @LukasEder 但任何像样的教程都应该涵盖这一点
  • @JanDvorak 我想我从来没有看过解释这个的教程。
  • @LukasEder 点;但是,逗号运算符在打高尔夫球时或在 for 头部一般有用:for(i=0, a=[]; i&lt;10; i++)
  • @JanDvorak 这里的问题是逗号操作符有据可查,return 有据可查,但是没有人写过如果您无意中尝试将它们组合起来会发生的坏事。 return (a, b) kinda 看起来就像一个带有参数列表的函数调用。除了它不是。

标签: javascript


【解决方案1】:

return 不支持返回多个参数。它的参数也不需要大括号,所以当你调用时:

return (this, 'one', 'two');

然后大括号只包含一个表达式,该表达式的结果就是返回给调用者的结果。

在该表达式中,您实际上使用了“逗号运算符”(两次)。

逗号表达式a, b 计算ab,但表达式的结果 只是b(即右手操作数)。

在你的例子中,你写了(a, b, c),相当于((a, b), c),因此仍然返回最右边的操作数(即"two"

【讨论】:

    【解决方案2】:

    这个other question 可能有用。

    本质上,如果你有return[],真的是return [],你的返回值就是一个项目列表。相比之下,return(x) 只是调用return x 的另一种方式。

    正如@Alnitak 所述,在return(a, 'one', 'two') 中,您使用逗号运算符返回一个表达式。

    【讨论】:

      【解决方案3】:

      这将返回一个包含三个元素的数组。在 Javascript 中,[] 用于数组表示法。

      return [ this, arg1, arg2 ]; 
      

      而这会导致表达式被计算,并且总是返回最后一个参数 (arg2):

      return ( this, arg1, arg2 ); 
      

      演示:

      console.log( ('a', 'b', 'c') ); // c
      console.log( ('a', 'b', false) ); // false
      console.log( (true, false, 0) ); // 0
      

      【讨论】:

        【解决方案4】:

        在 javascript 中,第一个被解决的操作数是圆括号,即 () 逗号运算符解析为最后一个操作数,即“二”。

        return ('one', 'two')
        return ('two')
        

        因此它返回两个

        【讨论】:

          【解决方案5】:

          没有像return[]return() 这样的特殊结构。它总是只是return &lt;some expression&gt;

          方括号是一个数组字面量,因此你得到一个数组作为返回值。 () 只是括号,x, y 始终是 y(查找逗号运算符)。

          【讨论】:

            猜你喜欢
            • 2016-12-07
            • 1970-01-01
            • 2013-06-02
            • 1970-01-01
            • 1970-01-01
            • 2014-03-24
            相关资源
            最近更新 更多