如果我有这样的功能:
param => params + 1
我需要在函数的体内放一个debugger
语句。是否添加了这样的括号:
param => { debugger; return params + 1 }
唯一的选择?
发布于 2015-12-29 14:34:53
来自MDN关于箭头函数的文章:
(param1、param2、…( paramN) => { statements } (param1,param2,…),paramN) =>表达式
您可以看到,没有大括号的语法要求箭头右侧的代码是表达式,这是语言本身创建的(不幸的) 区别。
因为debugger
是一条语句,所以在任何需要表达式的地方使用它都是语法错误。您可以处理的一件事是在表达式中转换调试器语句,您可以在表达式中欺骗JavaScript以求值但不返回,例如:
function debug(args) {
debugger;
return true;
}
params => debug() && params + 1
// or
params => console.log(params) || params + 1
由于逻辑运算符函数在JavaScript中的工作方式,这是正确的:
truthyA && B === B
falsyA || B === B
当链接逻辑运算符时,JavaScript计算从左到右的子表达式,然后根据它们的布尔等效值进行操作。这就是为什么有时会看到&&
代替if
语句:
if (smth) doStuff();
// is equivalent to:
smth && doStuff();
发布于 2019-02-27 12:55:30
在逻辑或运算符中使用console.log。这会将参数写入控制台。
const add = (x, y) => console.log(x, y) || x + y;
发布于 2018-02-03 20:49:36
这是另一种方法,它不需要定义函数:
(() => { debugger; })()
它是一个调用debugger
语句的自调用箭头函数,也是一个表达式。
因此,在您的代码中,可以使用:
param => (() => { debugger; })() && params + 1
输入起来有点困难,但是在任何需要表达式的地方都可以这样做。
请注意,如果希望params + 1
也被执行(例如,在调试语句之后继续执行),则必须从函数返回true:
(() => { debugger; return true })()
https://stackoverflow.com/questions/34513155
复制相似问题