初步探究ES6之箭头函数
我们先来看看箭头函数的语法:
([param] [, param]) => {statements
}param => expression
param 是参数,根据参数个数不同,分这几种情况:
() => { … } // 零个参数用 () 表示;
x => { … } // 一个参数可以省略 ();
(x, y) => { … } // 多参数不能省略 ();
// ES5 var total = values.reduce(function (a, b) {return a + b; }, 0);// ES6 var total = values.reduce((a, b) => a + b, 0);
当然=>后面也不一定非得接return 之后的语句,看下面:// ES5 $("#confetti-btn").click(function (event) {playTrumpet();fireConfettiCannon(); }); // ES6 $("#confetti-btn").click(event => {playTrumpet();fireConfettiCannon(); });
但是需要注意的是,多行语句需要用{}括起来,单行表达式不需要{},并且会作为函数返回值。x => { return x * x }; // 函数返回 x * x x => x * x; // 同上一行 x => return x * x; // SyntaxError 报错,不能省略 {} x => { x * x }; // 合法,没有定义返回值,返回 undefined
和普通函数一样,箭头函数也可以使用剩余参数和默认参数。var func1 = (x = 1, y = 2) => x + y; func1(); // 得到 3var func2 = (x, ...args) => { console.log(args) }; func2(1,2,3); // 输出 [2, 3]
箭头函数内部没有constructor方法,也没有prototype,所以不支持new操作。但是它对this的处理与一般的普通函数不一样。箭头函数的 this 始终指向函数定义时的 this,而非执行时。我们通过一个例子来理解:var o = {x : 1,func : function() { console.log(this.x) },test : function() {setTimeout(function() {this.func();}, 100);} };o.test(); // TypeError : this.func is not a function
上面的代码会出现错误,因为this的指向从o变为了全局(函数调用中的this都是指向全局的)。如果大家对javascript中的this不是很熟悉的话,可以看看我写过的一篇文章,深入理解javascript之this。好了,回归正题,我们需要修改上面的代码如下:
var o = {x : 1,func : function() { console.log(this.x) },test : function() {var _this = this;setTimeout(function() {_this.func(); }, 100);} };o.test();
通过使用外部事先保存的this就行了。这里就可以利用到箭头函数了,我们刚才说过,箭头函数的 this 始终指向函数定义时的 this,而非执行时。所以我们将上面的代码修改如下:
var o = {x : 1,func : function() { console.log(this.x) },test : function() {setTimeout(() => { this.func() }, 100);} };o.test();这回this就指向o了。
我们还需要注意一点的就是这个this是不会改变指向对象的,我们知道call和apply可以改变this的指向,但是在箭头函数中是无效的。var x = 1,o = {x : 10,test : () => this.x};o.test(); // 1 o.test.call(o); // 依然是1
初步探究ES6之箭头函数相关推荐
- button执行onclick函数_千万别再一直无脑使用ES6的箭头函数了,它虽然很有用但并不是万能的...
相信很多小伙伴自从知道了ES6的箭头函数以后,都疯狂得使用,渐渐的淡忘了普通函数的使用.不过确实,箭头函数看起来比较简洁,用起来也舒服,不过它的出现是为了解决某一部分问题的,并不是用来替代普通函数的, ...
- ES6语法---箭头函数/关于this指向
this指向问题: ES5:var obj = {x:1,func:function(){console.log(this.x);},test:function(){//定时器为异步setTimeou ...
- ES6中箭头函数解释
箭头函数 任何可以书写匿名函数的位置,都可以书写箭头函数 箭头函数将会绑定this为函数书写位置的this值 模块化(nodejs带来的模块化) 没有模块化的世界:全局变量污染,难以管理 常见的模块化 ...
- es6语法-箭头函数
箭头函数 创建 箭头函数.html 箭头函数提供了一种更加简洁的函数书写方式.基本语法是: 参数 => 函数体 // 传统 var f1 = function(a){return a } con ...
- 九、ES6的箭头函数
一.箭头函数的基本使用 <!DOCTYPE html> <html lang="en"> <head><meta charset=&quo ...
- [译]深入ES6之箭头函数
原作者:江凌 箭头一族缺少的家庭成员 在JavaScript出现以来,箭头(Arrow)就一直是其语法的一部分.一般来说,JavaScript教程的第一篇就会讲如何在HTML中插入箭头括号来作为注释, ...
- 深入ES6:箭头函数
箭头从一开始就一直是JavaScript的一部分.第一个JavaScript教程建议在HTML注释中包装内联脚本.这会阻止不支持JS的浏览器错误地将JS代码显示为文本.你会写这样的东西: <sc ...
- es6语法 箭头函数
一.语法形式: (参数1, 参数2, -, 参数N) => { 函数声明 }(参数1, 参数2, -, 参数N) => 表达式(单一) // 相当于:(参数1, 参数2, -, 参数N) ...
- 初步探究ES6之字符串模板和剩余参数,默认参数
本文介绍一下字符串模板以及剩余参数,默认参数的概念以及使用. 先来说说字符串模板. 字符串模板 ES6中允许使用反引号 ` 来创建字符串,此种方法创建的字符串里面可以包含由美元符号加花括号包裹的变量$ ...
- ES6特性:箭头函数转换,闭包
箭头函数转换 箭头函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象. // ES6写法 var handler = {id: "123456",init: fu ...
最新文章
- 1106 Lowest Price in Supply Chain
- nginx安装(正式)
- PHP代码为什么不能直接保存HTML文件——PHP生成静态页面教程
- python多线程实现
- java tessdata训练_Tesseract For Java为可执行jar设置Tessdata_Prefix
- POS机刷卡机招商加盟企业网站源码
- Eclipse启动Tomcat,45S超时问题解决
- 使用计算机为苹果更新,你不知道的一招,用电脑给苹果手机更新系统
- 如何在项目管理中使用PERT图
- TimePicker使用全解
- 如何恢复 TrustedInstaller 所有者权限;怎么给文件夹权限添加“所有受限制的应用程序包”这个用户主体:
- 【运营】产品推广计划书
- 写文章没高质量配图?python爬虫绕过限制一键搜索下载图虫创意图片!
- 8086CPU学习笔记:8086的寻址方式
- XBOX登录白屏,微软商店无法连接网络
- 微信小程序开发 - 视图与逻辑
- 人力资源管理系统面向对象建模分析
- DFS,BFS和迭代加深的联系与区别
- 个人简历html网页代码(使用chatgpt完成web开发课的实验)
- Android手机64位APP兼容
热门文章
- unity3d android自动打包,Unity自动化打包(二)
- aes加密c语言实现,基于C语言实现的aes256加密算法示例
- mysql日志课程_【mysql课程七】 MySQL日志管理
- Ubiquant LGBM Baseline 九坤量化大赛 版本44
- 牛顿法的优缺点及特征
- HDF5 library version mismatched error
- (机器学习)痛苦的Caffe配置之路(win10 教育版+vs2015+cmaker+cpu_only+python接口)
- 表格文字超数量就竖排_干货 |超实用Word、Excel、PPT软件技能
- 《K-means聚类算法研究综述》笔记
- NLP特征工程(待完善细节)