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;