让我们深入研究一下箭头函数。
箭头函数不仅仅是编写简洁代码的“捷径”。它还具有非常特殊且有用的特性。
JavaScript 充满了我们需要编写在其他地方执行的小函数的情况。
例如:
JavaScript 的精髓在于创建一个函数并将其传递到某个地方。
在这样的函数中,我们通常不想离开当前上下文。这就是箭头函数的主战场啦。
一、箭头函数没有 “this”
正如我们在 对象方法,"this" 一章中所学到的,箭头函数没有 this。如果访问 this,则会从外部获取。
例如,我们可以使用它在对象方法内部进行迭代:
- let group = {
- title: "Our Group",
- students: ["John", "Pete", "Alice"],
- showList() {
- this.students.forEach(
- student => alert(this.title + ': ' + student)
- );
- }
- };
- group.showList();
这里 forEach 中使用了箭头函数,所以其中的 this.title 其实和外部方法 showList 的完全一样。那就是:group.title。
如果我们使用正常的函数,则会出现错误:
- let group = {
- title: "Our Group",
- students: ["John", "Pete", "Alice"],
- showList() {
- this.students.forEach(function(student) {
- // Error: Cannot read property 'title' of undefined
- alert(this.title + ': ' + student)
- });
- }
- };
- group.showList();
报错是因为 forEach 运行它里面的这个函数,但是这个函数的 this 为默认值 this=undefined,因此就出现了尝试访问 undefined.title 的情况。
但箭头函数就没事,因为它们没有 this。
不能对箭头函数进行 new 操作
不具有 this 自然也就意味着另一个限制:箭头函数不能用作构造器(constructor)。不能用 new 调用它们。
箭头函数 VS bind
箭头函数 => 和使用 .bind(this) 调用的常规函数之间有细微的差别:
二、箭头函数没有 “arguments”
箭头函数也没有 arguments 变量。
当我们需要使用当前的 this 和 arguments 转发一个调用时,这对装饰器(decorators)来说非常有用。
例如,defer(f, ms) 获得了一个函数,并返回一个包装器,该包装器将调用延迟 ms 毫秒:
- function defer(f, ms) {
- return function() {
- setTimeout(() => f.apply(this, arguments), ms)
- };
- }
- function sayHi(who) {
- alert('Hello, ' + who);
- }
- let sayHiDeferred = defer(sayHi, 2000);
- sayHiDeferred("John"); // 2 秒后显示:Hello, John
不用箭头函数的话,可以这么写:
- function defer(f, ms) {
- return function(...args) {
- let ctx = this;
- setTimeout(function() {
- return f.apply(ctx, args);
- }, ms);
- };
- }
在这里,我们必须创建额外的变量 args 和 ctx,以便 setTimeout 内部的函数可以获取它们。
三、总结
箭头函数:
这是因为,箭头函数是针对那些没有自己的“上下文”,但在当前上下文中起作用的短代码的。并且箭头函数确实在这种使用场景中大放异彩。
【51CTO.com原创稿件】随着全球数字化转型的深入,云计算已经成为信息化发展的核...
案例背景 2020年冬季青年奥林匹克运动会(2020 WinterYouthOlympics)于欧洲时间...
作者|伍振河 博时基金互联网金融部架构师 、曾志 博时基金互联网金融部开发主管...
本文主要关注用哪些技术解决了哪些问题 整理思路 系统架构图 整个项目构建于 Spr...
云服务器 内存不足如何处理? 云服务器 内存,是其配置参数之一。内存大小也是影...
在不算太遥远的过去,业界对数据科学家的评判主要依据于他们发现、理解、管理和...
用户需要高配置IDC服务器,但因价格昂贵,无法找到合适的IDC服务商提供 服务器租...
系列文章 一分钟完成访问数据的智能巡检告警 对于运维的日常工作来说 服务器监控...
今日获悉,国际知名调研机构Gartner首次发布的《Magic Quadrant for Cloud Infra...
服务器租用 的优势是什么呢? 最重要的当然是价格方面比较实惠,不过这也是相对...