Javascript 转换ECMAScript 6';将s-arrow函数转换为正则函数

Javascript 转换ECMAScript 6';将s-arrow函数转换为正则函数,javascript,ecmascript-6,arrow-functions,Javascript,Ecmascript 6,Arrow Functions,我有下面的箭头函数 if(rowCheckStatuses.reduce((a,b)=>a+b,0)){} rowcheckstatus是1和0的数组,此箭头函数将它们相加生成一个数字。此数字用作布尔值,以确定数组中是否至少有一个“1” 问题是,我真的不明白箭头函数是如何工作的,我的IDE认为它的语法不好,拒绝检查文档的其余部分的语法错误 如何将其转换为常规函数以缓解这两个问题?通常可以通过替换 (<args>) => <body> 这条规则也有例外,所以如果你

我有下面的箭头函数

if(rowCheckStatuses.reduce((a,b)=>a+b,0)){}

rowcheckstatus
是1和0的数组,此箭头函数将它们相加生成一个数字。此数字用作布尔值,以确定数组中是否至少有一个“1”

问题是,我真的不明白箭头函数是如何工作的,我的IDE认为它的语法不好,拒绝检查文档的其余部分的语法错误


如何将其转换为常规函数以缓解这两个问题?

通常可以通过替换

(<args>) => <body>


这条规则也有例外,所以如果你想知道所有的差异,那么仔细阅读是很重要的。您还应该注意,箭头函数有一个词法
这个

您可以将其重构为:

if( rowCheckStatuses.reduce(function(a, b){return a + b}, 0)
初始累加器不是必需的(除非您希望数组有时为空),它可以是:

if( rowCheckStatuses.reduce(function(a, b){return a + b})
此数字用作布尔值,以确定数组中是否至少有一个“1”

可以更快(更清晰)地使用:

如果RowCheckStatus中有任何1,则返回true,并在遇到1时立即返回。另一种选择是indexOf:


有很多选择。

用常规函数替换箭头函数通常是无问题的:

var f = x => y;
var g = function(x) { return y; }
或者,在您的具体示例中:

rowCheckStatuses.reduce((a, b) => a + b, 0);
rowCheckStatuses.reduce(function(a, b) { return a + b; }, 0);
但是,请注意例外情况

箭头函数不绑定
此值。因此,在箭头函数中访问
this
可能会返回封闭执行上下文的
this
的值:

函数MyClass(){}
f=()=>这个;
MyClass.prototype.g=函数(){返回此;}
myClass=新的myClass();
console.log(myClass.f());//日志窗口`

console.log(myClass.g());//日志'myClass`
函数(a,b){返回a+b;}
显然不是重复的。OP询问如何将=>转换为常规函数。@le_m如果他们理解这些函数,这将是微不足道的。您正在使用哪个IDE?Ace,在neocities.org上这在技术上并不完全等同。如果从箭头函数更改为函数表达式,则会丢失词法
this
。在这种情况下,这并不重要,因为函数没有引用它。但要记住这一点很好。好消息是它很容易-只需在函数中添加一个
.bind(this)
。@JoeAttardi很好,但正如您所说,这与本例无关。;-)
if( rowCheckStatuses.some(function(a){return a == 1}))
if( rowCheckStatuses.indexOf(1) != -1)
var f = x => y;
var g = function(x) { return y; }
rowCheckStatuses.reduce((a, b) => a + b, 0);
rowCheckStatuses.reduce(function(a, b) { return a + b; }, 0);