1
<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() 有什么区别呢?

4

5 回答 5

6

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

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

然后大括号简单地包含一个表达式,其中该表达式的结果是返回给调用者的结果。

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

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

在您的情况下,您已经编写(a, b, c)了 ,相当于((a, b), c),因此仍然返回最右边的操作数(即"two"

于 2013-06-13T07:43:27.120 回答
1

这个其他问题可能有用。

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

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

于 2013-06-13T07:44:12.457 回答
1

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

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
于 2013-06-13T07:46:02.560 回答
1

没有像return[]or这样的特殊结构return()。它总是只是return <some expression>

方括号是一个数组文字,因此您会得到一个数组作为返回值。()只是括号,并且x, y总是y(查找逗号运算符)。

于 2013-06-13T07:53:40.300 回答
0

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

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

因此它返回两个

于 2013-06-13T07:46:27.297 回答