如果我有这样一个函数:
唯一的选择?
param => params + 1
我需要在函数体内放置一个debugger
语句。像这样添加括号:
param => { debugger; return params + 1 }
唯一的选择?
param => params + 1
我需要在函数体内放置一个debugger
语句。像这样添加括号:
param => { debugger; return params + 1 }
来自关于箭头函数的MDN文章:
你可以看到,无括号语法要求箭头右侧的代码必须是一个表达式,这是语言本身所做的(不幸的)区别。(param1, param2, …, paramN) => { statements } (param1, param2, …, paramN) => expression
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
&&
用于代替 if
语句的原因: if (smth) doStuff();
// is equivalent to:
smth && doStuff();
const add = (x, y) => console.log(x, y) || x + y;
(() => { debugger; })()
这是一个自动调用的箭头函数,调用了 debugger
语句,并且它也是一个表达式。
因此在您的代码中,您可以使用:
param => (() => { debugger; })() && params + 1
虽然打字有点困难,但在需要表达式的任何地方都能派上用场。
请注意,如果您希望params + 1
也被执行(例如,在调试语句后继续执行),您必须从函数中返回true:
(() => { debugger; return true })()
我还没有找到一个好的方法来在箭头函数中注入调试器。
选项: ()=>console.log(9)?? (()=>{debugger} )() ?? console.log(0)
控制台是任何代码的存根。(()=>{debugger} )()
似乎是使调试器内联的唯一方法。在您的情况下:
param => (()=>{debugger} )() ?? params + 1