具有多个逗号分隔值的 return 语句

return statement with multiple comma separated values

本文关键字:return 语句 分隔      更新时间:2023-09-26

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

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

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

我以前没有遇到过这种模式,但一直在查看 Bing 地图 Ajax 控件,并多次注意到这种模式。

据我了解,不会返回多个值。那么这种模式有什么作用呢?退货是什么?这种模式有什么好处?

它是逗号运算符。它计算其左侧操作数,丢弃结果,计算其右侧操作数,并将其作为其结果值。它是从左到右的关联,因此a, b, c计算a,然后b,然后c,并将c的结果作为其值。

在您的示例中,它与以下内容完全相同:

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}

。在不更改代码功能的情况下,如果后面是}或其他一些适当的字符(或文件末尾)以触发末尾的自动分号插入。否则,它将需要第一个字符上的;,但这仍然保存了一个字符。

号运算符计算(从左到右)表达式,然后返回最后一个结果,在本例中为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;