Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有多个逗号分隔值的return语句_Javascript - Fatal编程技术网

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

Javascript 带有多个逗号分隔值的return语句,javascript,Javascript,可能重复: 这种模式的回报是什么?它是如何工作的 返回myfunc(),myobj.myvar=someobj.prop,myobj 我以前没有遇到过这种模式,但我一直在研究Bing Maps Ajax控件,并多次注意到这种模式 据我所知,不会返回多个值。那么这个模式是做什么的呢?归还什么?这种模式的好处是什么?这是最重要的。它计算左侧操作数,丢弃结果,计算右侧操作数,并将其作为结果值。它是从左到右关联的,因此a,b,c计算a,然后b,然后c,并将c的结果作为其值 在您的示例中,它完全类似于:

可能重复:

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

返回myfunc(),myobj.myvar=someobj.prop,myobj

我以前没有遇到过这种模式,但我一直在研究Bing Maps 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个字符):

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

…在不更改代码功能的情况下,如果后面是要在末尾触发的
}
或其他适当字符(或文件结尾)。否则,它将需要
在第一个表达式上,但仍然保存一个字符。

从左到右对表达式求值,然后返回最后一个结果,在本例中,这将是对
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;

它是否返回一组参数;比如如何在函数调用中重载参数?“这个模式有什么好处?”-它没有。这是令人困惑的非惯用代码。我看不出任何原因。。。它甚至在堆栈上放置了比有三条正常指令更多的对象……这个问题及其答案对我来说非常有价值,也就是说,这个问题不应该被标记为重复。所谓的“原始”问题涉及逗号的一般用法,但这里的问题更具体。我来这里是为了深入了解使用装饰器时从Typescript操场发出的传输代码,这个问题及其答案对我帮助很大。我的谷歌搜索可能不会让我找到“原始”问题,即使找到了,我也不会满意。所以,感谢提问者和回复者。+1(我刚学到一个新东西)更糟糕的是,你可以把所有这些都放在一行上。使用
代替
只允许
return
语句出现在前面,这会让维护人员感到困惑。这实际上是我所怀疑的,但如果不返回前两条语句,它们就不会出现在return语句之前,这似乎很奇怪。代码被缩小了,我想知道它是否与优化和缩小有关?我真的不明白这会有什么不同。@FunkyFresh84:如果一个迷你们不在任何可以安全保存的地方保存一个角色,它就不会完成它的工作@vitaly-t-逗号运算符?不,绝对不仅仅是遗产。事实上,由于简洁的箭头函数,它现在比五年前得到了更多的使用,人们在这里插入了一个副作用:
a=map(v=>(v.method(),v.prop))。(我不喜欢这样,但人们都这么做。)
if (true)
    ;// do something
else {
    myfunc();
    myobj.myvar = someobj.prop;
    return  myobj;
}
myfunc();
myobj.myvar = someobj.prop;
return myobj;