对Javascript中箭头函数的深入理解

对Javascript中箭头函数的深入理解
从一开始,箭头就是Javascript的一部分。在第一个Javascript中,建议内联脚本代码被包装在HTML注释中,这样可以防止浏览器不支持Javascript的错误,并将代码显示为明文:
<!——
document.bgcolor =棕色; / /红色

<!——
document.bgcolor =棕色; / /红色
旧浏览器将看到不支持的两个标记和注释。只有支持Javascript的新浏览器才会把它解析成Javascript代码。

为了支持这个奇怪的特性,Javascript浏览器引擎在标签的第一行,但任何一部分的Javascript代码都是可用的,它甚至可以在节点中使用。

碰巧的是,这种风格的注释是标准的6首。但这不是我们要谈的箭。

>还说,与HTML中的HTML不同,注释是注释的一部分,在使用Javascript之前,在行中是注释。

只有当出现在一行的开头时,它才表示箭头是注释,因为在其他情况下,>是操作符(to)。

函数倒计时(n){
当(n = 0)n达到零
警报(N);
Blastoff();
}

函数倒计时(n){
当(n = 0)n达到零
警报(N);
Blastoff();
}
上面的代码是能够运行。流传到N是0,这不是6的功能,但它是非常误导我们熟悉的特征。你能理解上面的代码的运行您可以在堆栈溢出处找到答案。

当然,有一个箭头,即小于或等于操作符< =,也许你也能找到箭头的用法,但我们仍然看到一个停止,我们从来没有见过箭头:

<!单行注释
运算
<小于或等于运算符
= >
那么,是什么这是本文将要讨论的主题。

首先,让我们来谈谈函数。

无处不在的函数表达式

Javascript的一个有趣特性是,您随时都需要一个函数,您可以轻松地创建它们。

例如,为按钮绑定一个单击事件:

$(#confetti-btn).Click (

$(#纸屑按钮(Click)。
jQuery的点击()方法需要一个函数作为参数,并且我们可以很容易地在地上创建一个函数。

$(#纸屑BTN)。Click(函数(事件){
playtrumpet();
fireconfetticannon();
});
$(#纸屑BTN)。Click(函数(事件){
playtrumpet();
fireconfetticannon();
});

现在对我们来说,它是写这样的代码的最自然的事。但在Javascript中开始流行,这种风格的代码看起来很奇怪,因为在其他语言中没有这样的功能。1958、LISP有功能性表达,也被称为lambda函数,在C++中,Python,C #没有特色,和java,已经存在很多年了。

现在,这四种语言都有lambda表达式,而新兴语言一般都是用lambda表达式构建的。

与其他几种语言相比,Javascript的语法有点冗长:

六语言中的一个非常简单的函数。
函数(返回){ 0;
{ }(int){ return } / / C++ > 0;
(λ(a)(a 0));Lisp
λ:一# > 0条
= >一> 0 / / C #
一个> > 0 / / java

六语言中的一个非常简单的函数。
函数(返回){ 0;
{ }(int){ return } / / C++ > 0;
(λ(a)(a 0));Lisp
λ:一# > 0条
= >一> 0 / / C #
一个> > 0 / / java
箭头功能

6引入了一个新的语法写功能:

/ / ES5
VaR选择= alljobs.filter(功能(工作){)
返回job.isselected();
});

/ / ES6
VaR选择= alljobs.filter(工作=工作。选择)();
/ / ES5
VaR选择= alljobs.filter(功能(工作){)
返回job.isselected();
});

/ / ES6
VaR选择= alljobs.filter(工作=工作。选择)();

当函数只需要一个参数时,箭头函数语法可以简化为表达式=表达式,直接省略函数和返回关键字,即使在括号的结尾,分号也被省略。

要编写具有多个参数的函数(或没有参数、或休息参数和默认值,或分解参数),需要用括号括起参数。

/ / ES5
无功总= values.reduce(功能(A,B){
返回A+;
},0);

/ / ES6
VaR(总= values.reduce(A,B)= A + B,0);

/ / ES5
无功总= values.reduce(功能(A,B){
返回A+;
},0);

/ / ES6
VaR(总= values.reduce(A,B)= A + B,0);

箭头的功能,还可以用一些工具库完美的使用,如Underscore.js不变。事实上,在一成不变的文件,所有的例子都是用6,其中许多已被用于在箭头的功能。

除了使用表达式外,箭头函数还可以包含语句块和前面提到的示例。

/ / ES5
$(#纸屑BTN)。Click(函数(事件){
playtrumpet();
fireconfetticannon();
});

/ / ES5
$(#纸屑BTN)。Click(函数(事件){
playtrumpet();
fireconfetticannon();
});
下面是使用箭头函数的方法:

/ / ES6
$(#纸屑BTN)。Click(事件=> {
playtrumpet();
fireconfetticannon();
});

/ / ES6
$(#纸屑BTN)。Click(事件=> {
playtrumpet();
fireconfetticannon();
});
需要注意的是,使用语句块的箭头函数不会自动返回一个值,必须显式使用返回值返回值。

另一个建议是,当使用箭头函数返回一个对象时,总是将括号中返回的对象括起来。

为每个小狗创建一个新的空对象
无功chewtoys = puppies.map(小狗= > { }); / /错误!
无功chewtoys = puppies.map(小狗= >({ }) / /好);
为每个小狗创建一个新的空对象
无功chewtoys = puppies.map(小狗= > { }); / /错误!
无功chewtoys = puppies.map(小狗= >({ }) / /好);

因为空对象和空块{ } { }将始终把6看起来一模一样,背面为起始{ = >块,而不是一开始的一个对象,然后小狗= > { }被分析为一体的功能没有箭头的函数,但返回值未定义。

免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部