如果我有这样的函数:
param => params + 1
我需要在函数体中放入一个CCD_ 1语句。正在添加这样的括号:
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
当链接逻辑运算符时,JavaScript从左到右计算子表达式,然后根据其布尔等价项进行操作。这就是为什么有时会看到&&
代替if
语句的原因:
if (smth) doStuff();
// is equivalent to:
smth && doStuff();
使用带有逻辑OR运算符的console.log。这会将参数写入控制台。
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