用 return 语句短路
short circuit with a return statement
据我了解,使用逻辑 AND && 运算符进行短路的工作方式如下:
假设我有表达式 a
和 b
那么 a && b
与 a ? b : a
相同,因为
如果 a
为真则结果为 b
并且
如果 a
是假的,那么结果将是 a
(甚至没有尝试解析 b
)
既然如此,为什么以下(演示)代码抛出 SyntaxError:
var add = function(a,b) {
b && return a+b; // if(b) return a+b
...
}
有没有办法用return语句短路?
&&
二元运算符需要两部分都是 表达式.
return something
是语句而不是表达式(它不产生值,因为函数结束时值没有用)。
只需使用
if (b) return a+b;
代码更易于阅读。
阅读更多:
- Expressions vs Statements
- the return statement(EcmaScript 规范)
- logical operators (MDN)
不,return
是一个语句,不能将其用作 AND 表达式的一部分。
您可以将代码转换为单个 return
语句,但如果您出于某种原因需要这样做:
if (b) return a+b;
/* else */ ...
(或多或少)等同于
return b && a+b || (...);
当然,在您手写并用眼睛阅读的任何代码中,无论如何,you should just an if
statement。
据我了解,使用逻辑 AND && 运算符进行短路的工作方式如下:
假设我有表达式 a
和 b
那么 a && b
与 a ? b : a
相同,因为
如果 a
为真则结果为 b
并且
如果 a
是假的,那么结果将是 a
(甚至没有尝试解析 b
)
既然如此,为什么以下(演示)代码抛出 SyntaxError:
var add = function(a,b) {
b && return a+b; // if(b) return a+b
...
}
有没有办法用return语句短路?
&&
二元运算符需要两部分都是 表达式.
return something
是语句而不是表达式(它不产生值,因为函数结束时值没有用)。
只需使用
if (b) return a+b;
代码更易于阅读。
阅读更多:
- Expressions vs Statements
- the return statement(EcmaScript 规范)
- logical operators (MDN)
不,return
是一个语句,不能将其用作 AND 表达式的一部分。
您可以将代码转换为单个 return
语句,但如果您出于某种原因需要这样做:
if (b) return a+b;
/* else */ ...
(或多或少)等同于
return b && a+b || (...);
当然,在您手写并用眼睛阅读的任何代码中,无论如何,you should just an if
statement。