首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >es6箭头函数调试器语句

es6箭头函数调试器语句
EN

Stack Overflow用户
提问于 2015-12-29 14:33:12
回答 4查看 3.8K关注 0票数 5

如果我有这样的功能:

代码语言:javascript
运行
复制
param => params + 1

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

代码语言:javascript
运行
复制
param => { debugger; return params + 1 }

唯一的选择?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-12-29 14:34:53

来自MDN关于箭头函数的文章:

(param1、param2、…( paramN) => { statements } (param1,param2,…),paramN) =>表达式

您可以看到,没有大括号的语法要求箭头右侧的代码是表达式,这是语言本身创建的(不幸的) 区别

因为debugger是一条语句,所以在任何需要表达式的地方使用它都是语法错误。您可以处理的一件事是在表达式中转换调试器语句,您可以在表达式中欺骗JavaScript以求值但不返回,例如:

代码语言:javascript
运行
复制
function debug(args) {
     debugger;
     return true;
}

params => debug() && params + 1

// or

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

由于逻辑运算符函数在JavaScript中的工作方式,这是正确的:

代码语言:javascript
运行
复制
truthyA && B  === B

falsyA || B === B

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

代码语言:javascript
运行
复制
 if (smth) doStuff();
 // is equivalent to:
 smth && doStuff();
票数 11
EN

Stack Overflow用户

发布于 2019-02-27 12:55:30

在逻辑或运算符中使用console.log。这会将参数写入控制台。

代码语言:javascript
运行
复制
const add = (x, y) => console.log(x, y) || x + y;
票数 2
EN

Stack Overflow用户

发布于 2018-02-03 20:49:36

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

代码语言:javascript
运行
复制
(() => { debugger; })()

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

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

代码语言:javascript
运行
复制
param => (() => { debugger; })() && params + 1

输入起来有点困难,但是在任何需要表达式的地方都可以这样做。

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

代码语言:javascript
运行
复制
(() => { debugger; return true })()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34513155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档