javascript 箭头函数的使用 初学者必看
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。
本文我们介绍箭头(arrow)函数的优点。
更简洁的语法
我们先来按常规语法定义函数:
1
2
3
4
5
function funcName(params) {
return params + 2;
}
funcName(2);
// 4
该函数使用箭头函数可以使用仅仅一行代码搞定!
1
2
3
var funcName = (params) => params + 2
funcName(2);
// 4
是不是很酷!虽然是一个极端简洁的例子,但是很好的表述了箭头函数在写代码时的优势。我们来深入了解箭头函数的语法:
1
(parameters) => { statements }
如果没有参数,那么可以进一步简化:
1
() => { statements }
如果只有一个参数,可以省略括号:
1
parameters => { statements }
如果返回值仅仅只有一个表达式(expression), 还可以省略大括号:
1
2
3
4
5
6
parameters => expression
// 等价于:
function (parameters){
return expression;
}
现在你已经学会了箭头函数的语法,我们来实战一下。打开Chrome浏览器开发者控制台,输入:
1
var double = num => num * 2
我们将变量double绑定到一个箭头函数,该函数有一个参数num, 返回 num * 2。 调用该函数:
1
2
3
4
5
double(2);
// 4
double(3);
// 6
没有局部this的绑定
和一般的函数不同,箭头函数不会绑定this。 或则说箭头函数不会改变this本来的绑定。
我们用一个例子来说明:
1
2
3
4
function Counter() {
this.num = 0;
}
var a = new Counter();
因为使用了关键字new构造,Count()函数中的this绑定到一个新的对象,并且赋值给a。通过console.log打印a.num,会输出0。
1
2
console.log(a.num);
// 0
我们来看一下输出结果:如果我们想每过一秒将a.num的值加1,该如何实现呢?可以使用setInterval()函数。
1
2
3
4
5
6
7
function Counter() {
this.num = 0;
this.timer = setInterval(function add() {
this.num++;
console.log(this.num);
}, 1000);
}
我们来看一下输出结果:
1
2
3
4
5
var b = new Counter();
// NaN
// NaN
// NaN
// ...
你会发现,每隔一秒都会有一个NaN打印出来,而不是累加的数字。到底哪里错了呢?
首先使用如下语句停止setInterval函数的连续执行:
1
clearInterval(b.timer);
我们来尝试理解为什么出错:根据上一篇博客讲解的规则,首先函数setInterval没有被某个声明的对象调用,也没有使用new关键字,再之没有使用bind, call和apply。setInterval只是一个普通的函数。实际上setInterval里面的this绑定到全局对象的。我们可以通过将this打印出来验证这一点:
1
2
3
4
5
6
7
function Counter() {
this.num = 0;
this.timer = setInterval(function add() {
console.log(this);
}, 1000);
}
var b = new Counter();
你会发现,整个window对象被打印出来。 使用如下命令停止打印:
1
clearInterval(b.timer);
回到之前的函数,之所以打印NaN,是因为this.num绑定到window对象的num,而window.num未定义。
那么,我们如何解决这个问题呢?使用箭头函数!使用箭头函数就不会导致this被绑定到全局对象。
1
2
3
4
5
6
7
8
9
10
11
12
function Counter() {
this.num = 0;
this.timer = setInterval(() => {
this.num++;
console.log(this.num);
}, 1000);
}
var b = new Counter();
// 1
// 2
// 3
// ...
通过Counter构造函数绑定的this将会被保留。在setInterval函数中,this依然指向我们新创建的b对象。
为了验证刚刚的说法,我们可以将 Counter函数中的this绑定到that, 然后在setInterval中判断this和that是否相同。
1
2
3
4
5
6
7
8
9
10
function Counter() {
var that = this;
this.timer = setInterval(() => {
console.log(this === that);
}, 1000);
}
var b = new Counter();
// true
// true
// ...
总结正如我们期望的,打印值每次都是true。最后,结束刷屏的打印:
箭头函数写代码拥有更加简洁的语法;
不会绑定this。
————————————————
版权声明:本文为CSDN博主「茅坑的石头」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/lishuoboy/article/details/87346141
javascript 箭头函数的使用 初学者必看的更多相关文章
- PHP常用180函数总结【初学者必看】
数学函数 1.abs(): 求绝对值 <span style="font-size: 14px;">$abs = abs(-4.2); //4.2<br>& ...
- 15个初学者必看的基础SQL查询语句
本文由码农网 – 小峰原创翻译,转载请看清文末的转载要求,欢迎参与我们的付费投稿计划! 本文将分享15个初学者必看的基础SQL查询语句,都很基础,但是你不一定都会,所以好好看看吧. 1.创建表和数据插 ...
- 轻松学习 JavaScript——第 6 部分:JavaScript 箭头函数
JavaScript箭头函数是ECMAScript 6中引入的编写函数表达式的一种简便方法.通常,在JavaScript中,可以通过两种方式创建函数: 函数语句. 函数表达式. 可以如下所示创建函数语 ...
- JavaScript箭头函数中的this详解
前言 箭头函数极大地简化了this的取值规则. 普通函数与箭头函数 普通函数指的是用function定义的函数: var hello = function () { console.log(" ...
- mysql进阶(二十六)MySQL 索引类型(初学者必看)
mysql进阶(二十六)MySQL 索引类型(初学者必看) 索引是快速搜索的关键.MySQL 索引的建立对于 MySQL 的高效运行是很重要的.下面介绍几种常见的 MySQL 索引类型. 在数 ...
- 动态导航栏和JavaScript箭头函数
动态导航栏和JavaScript箭头函数 今天我们来写一下动态的导航栏,并且学一下JavaScript的箭头函数等相关问题. 样式如下所示: html中执行代码如下所示: <!DOCTYPE h ...
- java初学者必看之构造方法详细解读
java初学者必看之构造方法详细解读 构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是在调用构造方法. 格式 public 类名称(参数类型 参数名称){ 方法体 } 注 ...
- JavaScript初学者必看“箭头函数”
译者按: 箭头函数看上去只是语法的变动,其实也影响了this的作用域. 原文: JavaScript: Arrow Functions for Beginners 译者: Fundebug 为了保证可 ...
- JavaScript初学者必看“this”
译者按: JavaScript的this和Java等面向对象语言中的this大不一样,bind().call()和apply()函数更是将this的灵活度进一步延伸. 原文: JavaScript: ...
随机推荐
- Spring cloud微服务安全实战-4-10Zuul网关安全开发(三)
首先把地址给它 发送post请求,请求的数据就是这个entity对象. 最后返回的值要封装到TokenInfo里面 如果一切正常的话就会拿到一个响应的实体,实体里面就包含了TokenInfo 打印实体 ...
- 【Linux】Jenkins以war包运行及开机启动配置(四)
本例介绍jenkins已war包运行及开机启动配置 环境:Linux环境(CentOS 7.4) 以war包运行 1.下载jenkins.war包 2.启动war包( 默认端口:8080,默认JENK ...
- 【Linux】宝塔上 GitLab数据迁移修改配置后nginx无法启动
背景: 服务器A 向 服务器B 迁移数据,修改配置重启.发现gitlab的 nginx 无法启动. 查找原因 gitlab-ctl tail 错误信息: 网上查了查,似乎是宝塔的问题, 原因应该是为了 ...
- PhpStorm的主题和字体设置
打开PhpStorm,点击File,然后点击Setting 然后 点击Apply,就可以看到主题变化的效果,其次就是来设置字体,先要选取一个样式,然后点击Save As ,然后命名,我选择的是最后一个 ...
- 网络编程之Reactor 模式
基本的架构是 epoll+线程池. 这篇博文主要从以下几个方面进行阐述: (1)reactor模式的一个介绍:(只要是我的理解) (2)关于线程池的说明. (3)如何将epoll + 池结合起来实现一 ...
- node.js http-server 搭建本地服务器
使用vue-cli创建的项目,能够实现浏览器中自动刷新,实时查看项目效果,其中的原理在于,webpack在本地启动了一个本地服务器,将本机当作一台服务器: 打包后的文件是一个html静态页面,在本地文 ...
- 未找到路径“ ”的控制器或该控制器未实现 IController。
未找到路径“/Platform/t_spay_sub_mchno/Index”的控制器或该控制器未实现 IController. 从SVN复制了份代码修改,然后找不到控制器和页面.在项目属性-WEB- ...
- jQuery插件——imgbox(点击图片查看大图)
需要的资源: 需要对应的js代码和css样式,大家可以通过www.htmldrive.net平台下载,也可以在我文章的底部下载.对应的资源如下,将资源引入页面(别忘了JQuery): 注意:jQuer ...
- linux-rsync-同步本地文件夹
linux-rsync-同步本地文件夹 1.安装rsync: yum list rsync yum install rsync 3.使用rsync命令进行同步 rsync -av 源目录 目标目录
- 学习笔记:oracle学习三:SQL语言基础之sql语言简介、用户模式
目录 1.sql语言简介 1.1 sql语言特点 1.2 sql语言分类 1.3 sql语言的编写规则 2.用户模式 2.1 模式与模式对象 2.2 实例模式scott 本系列是作为学习笔记,用于记录 ...