这种模式会带来什么回报?它是如何工作的?
return myfunc(), myobj.myvar = someobj.prop, myobj
之前我没有遇到过这种模式,但一直在查看Bing Maps Ajax Control,并多次注意到这种模式。
据我所知,不会返回多个值。那么这种模式有什么作用呢?什么回来了?这种模式的好处是什么?
答案 0 :(得分:127)
这是comma operator。它评估其左侧操作数,抛出结果,评估其右侧操作数,并将其作为结果值。它是从左到右关联的,因此a, b, c
评估a
,然后评估b
,然后评估c
,并将c
的结果作为其值。< / p>
在您的示例中,它完全像:
myfunc();
myobj.myvar = someobj.prop;
return myobj;
有些人真的更喜欢在一条线上做事,即使没有客观理由。你给出的例子没有任何好处,实际上它让人感到困惑,因为它看起来像前两位与最终返回的值有关,而它们却没有。 (我写的)在你告诉我们之前它是缩小的代码;显然,对人类不清楚只是源代码中的一个问题,而不是缩小代码。)
因为你已经说过它是一个缩小器:如果这是条件块的一部分,缩小器可能获得的非常小可能的好处:它可以保存一个或两个字符。如果我们假设长形看起来像这样:
if (someCondition) {
myfunc();
myobj.myvar = someobj.prop;
return myobj;
}
...使用逗号运算符,minifier可以执行此操作(63个字符):
if(someCondition)return myfunc(),myobj.myvar=someobj.prop,myobj
...而不是这个(65个字符):
if(someCondition){myfunc();myobj.myvar=someobj.prop;return myobj}
...在不更改代码功能的情况下,如果以下内容是}
或其他适当的字符(或文件结尾)来触发{{3} } 在末尾。否则,它需要第一个;
,但仍然可以保存一个字符。
答案 1 :(得分:9)
comma operator评估(从左到右)表达式,然后返回最后一个结果,在这种情况下将是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;
}
答案 2 :(得分:1)
在你的例子中,myobj应该被返回到执行之前的所有内容
myfunc();
myobj.myvar = someobj.prop;
return myobj;