2017-09-24 48 views
0

no-return-assign在返回语句中不允许任何分配。但是,默认情况下,当您将您的任务放在括号中时,它会允许它。“不返回分配” - 带括号和不带括号的分配之间的区别

return (foo = 1 + 1)return foo = 1 + 1有什么不同?

我有这个问题,因为我尝试用

return createMatrixRow(
    width, 
    element, 
    addWidth, 
    elements.concat(addWidth ? Object.assign({}, element, (element.position.width = width)) : element) 
) 

为了避免我在括号把element.position.width = width了以下错误消息。

+0

分组操作员可以更改评估顺序,但它不会更改单个表达式的结果。即'foo'和'(foo)'完全一样。 –

回答

5

没有区别。在这两种情况下,它们形成一个单一的表达式,不同之处在于表达式是分组操作符,该操作符接收原始分配表达式并返回其结果。

这是使用parens手动覆盖可能看起来像错误的分配的linters相当常见的特征。

例如,这通常会烦扰棉短绒:

while (x = re.exec(data)) { 
    // do work 
} 

原因是,分配作为一个条件是非常经常一个错字,其中==之意。

但是,这往往会满足它:

while ((x = re.exec(data))) { 
    // do work 
} 

否则多余的父母说的一种方式“是的,我知道这是一个任务,所以我会用这些不必要的括号来表示它包那“

1

的陈述

return foo = 1 + 1; 

return (foo = 1 + 1); 

是相同的,只要JavaScript的语义而言。

相关问题