返回语句与多个逗号分隔值

可能重复:
Javascript语法:逗号的意思是什么?

这种模式返回什么? 它是如何工作的?

return myfunc(), myobj.myvar = someobj.prop, myobj

我以前没有遇到过这种模式,但一直在看Bing Maps Ajax Control,并多次注意到这种模式。

据我所知,多个值不返回。 那么这种模式是做什么的? 什么是返回? 这种模式的好处是什么?

这是逗号运算符 。 它按顺序运行一系列expression式,然后返回最后一个expression式的结果。 完全像:

 myfunc(); myobj.myvar = someobj.prop; return myobj; 

有些人甚至在没有客观理由的情况下,也喜欢做一件事。 在你给的例子中没有任何好处,事实上它是令人困惑的,因为它使得它看起来像前两位与最终将被返回的值相关,而他们不这样做。 (我之前写过,在你告诉我们这是缩小的代码之前;显然,人类不清楚只是源代码中的问题,而不是缩小的代码。)

既然你已经说过这是一个缩小器:缩小器可能获得的非常小的好处是,如果这是条件块的一部分:它可以保存一个或两个字符。 如果我们假设长表单看起来像这样:

 if (someCondition) { myfunc(); myobj.myvar = someobj.prop; return myobj; } 

…使用逗号运算符,缩小器可以做到这一点(63个字符):

 if(someCondition)return myfunc(),myobj.myvar=someobj.prop,myobj 

…而不是这个(65个字符):

 if(someCondition){myfunc();myobj.myvar=someobj.prop;return myobj} 

…而不改变代码的function, 如果接下来是}或其他适当的字符(或文件结束)来触发在末尾的自动分号插入 。 否则,它将需要; 在第一个,但仍然保存一个字符。

逗号运算符 (从左到右)评估expression式,然后返回最后的结果,在这种情况下将是对myobj标识符的评估。

你可以做到这一点,消除一些花括号,如果这对你很重要…

 if (true) ;// do something else return myfunc(), myobj.myvar = someobj.prop, myobj 

…而不是…

 if (true) ;// do something else { myfunc(); myobj.myvar = someobj.prop; return myobj; } 

在你的例子中,myobj应该被返回到之前的每一件事情被执行

 myfunc(); myobj.myvar = someobj.prop; return myobj;