sna*_*che 2 javascript ecmascript-6 arrow-functions
我有以下箭头功能
if( rowCheckStatuses.reduce((a, b) => a + b, 0) ){}
rowCheckStatuses是一个1和0的数组,这个箭头函数将它们全部加起来产生一个数字.此数字用作布尔值,以确定数组中是否至少有一个"1".
问题是,我真的不明白箭头功能是如何工作的,我的IDE认为这是错误的语法,并拒绝检查我的文档的其余部分是否存在语法错误.
我如何将其转换为常规功能以缓解这两个问题?
通常可以通过替换来转换箭头函数
(<args>) => <body>
Run Code Online (Sandbox Code Playgroud)
同
function(<args>) { return <body>; }
Run Code Online (Sandbox Code Playgroud)
所以你的
rowCheckStatuses.reduce(function(a, b) { return a + b; }, 0)
Run Code Online (Sandbox Code Playgroud)
此规则有例外情况,因此如果您想了解所有差异,请务必阅读箭头功能.您还应该注意箭头函数有词法this.
您可以将其重构为:
if( rowCheckStatuses.reduce(function(a, b){return a + b}, 0)
Run Code Online (Sandbox Code Playgroud)
初始累加器不是必需的(除非您希望数组有时为空),它可能是:
if( rowCheckStatuses.reduce(function(a, b){return a + b})
Run Code Online (Sandbox Code Playgroud)
这个数字作为一个布尔值来确定数组中是否至少有一个“1”
使用可能更快(更清晰):
if( rowCheckStatuses.some(function(a){return a == 1}))
Run Code Online (Sandbox Code Playgroud)
如果rowCheckStatuses 中有任何 1 ,它将返回true,并且一旦遇到它就会返回。另一种选择是indexOf:
if( rowCheckStatuses.indexOf(1) != -1)
Run Code Online (Sandbox Code Playgroud)
很多替代品。
用常规函数替换箭头函数通常不会出现问题:
var f = x => y;
var g = function(x) { return y; }
Run Code Online (Sandbox Code Playgroud)
或者,在您的具体示例中:
rowCheckStatuses.reduce((a, b) => a + b, 0);
rowCheckStatuses.reduce(function(a, b) { return a + b; }, 0);
Run Code Online (Sandbox Code Playgroud)
但是,请注意例外情况:
箭头函数不绑定this值。因此,在箭头函数中访问this可能会返回封闭执行上下文的值this:
var f = x => y;
var g = function(x) { return y; }
Run Code Online (Sandbox Code Playgroud)
箭头函数也无法访问本地arguments对象。arguments在箭头函数中访问可能会返回arguments封闭函数的 :
rowCheckStatuses.reduce((a, b) => a + b, 0);
rowCheckStatuses.reduce(function(a, b) { return a + b; }, 0);
Run Code Online (Sandbox Code Playgroud)
new.target和 也同样如此super。另请参阅ES6 箭头函数和使用 Function.prototype.bind 绑定的函数之间有什么区别(如果有)?
| 归档时间: |
|
| 查看次数: |
8052 次 |
| 最近记录: |