es6箭头函数调试器语句



如果我有这样的函数:

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

最新更新