es6 arrow函数调试器语句

时间:2015-12-29 14:33:13

标签: javascript ecmascript-6

如果我有这样的功能:

param => params + 1

我需要在函数体内放一个debugger语句。是这样添加括号:

param => { debugger; return params + 1 }

唯一的选择?

3 个答案:

答案 0 :(得分:9)

关于箭头功能的MDN文章:

(param1, param2, …, paramN) => { statements }
(param1, param2, …, paramN) => expression

您可以看到无括号语法要求箭头右侧的代码为表达式,这是由语言本身制作的(不幸)distinction

由于debugger是一个语句,因此在预期表达式的任何地方使用它都是语法错误。你可以解决这个问题的一个方法是在一个表达式中转换你的调试器语句,你可以用JavaScript来评估但不返回,例如:

function debug(args) {
     debugger;
     return true;
}

params => debug() && params + 1

// or

params => console.log(params) || params + 1

这样做的方式是因为JavaScript中的logical operators函数的方式,这是真的:

truthyA && B  === B

falsyA || B === B

当链接逻辑运算符时,JavaScript从左到右计算子表达式,然后根据它们的布尔等价物进行操作。这就是为什么您有时会看到&&代替if语句:

 if (smth) doStuff();
 // is equivalent to:
 smth && doStuff();

答案 1 :(得分:1)

最简单的方法:将console.log与逻辑OR运算符配合使用。这会将参数写入控制台。

const add = (x, y) => console.log(x, y) || x + y;

答案 2 :(得分:0)

这是另一种方法,它不需要定义一个函数:

(() => { debugger; })()

它是一个自调用箭头函数,它调用debugger语句,它也是一个表达式。

因此,在您的代码中,您可以使用:

param => (() => { debugger; })() && params + 1

键入起来有点困难,但在预期表达的任何地方都可以使用。

请注意,如果您还希望执行params + 1(例如,在调试语句之后继续),则必须从函数返回true:

(() => { debugger; return true })()