ES6箭头函数Arrow Function
果然,隔了很长时间都没有来博客园上逛了......
前一段时间一直在忙我们参加的一个比赛,转眼已经好久没有来逛过博客园了,果然还是很难坚持的......
今天总算还是想起来要过来冒个泡,强行刷一波存在感......
------------------------------------以上全是废话----------------------------------------------------
箭头函数时es6中的语法,总体来说,语法相较于es5中函数的写法要简明很多,使用起来也很方便,那么,就简单来说说,箭头函数的用法和好处吧。
1. 箭头函数拥有简明的语法,写起来更加简单
const numbers = [1, 2, 3, 4, 5, 6];
numbers.forEach(function(number) {
console.log(number);
}) // 箭头函数简写形式
// 1.去掉function关键字,使用 => 替代
numbers.forEach((number) => {
console.log(number);
}) // 当匿名函数有且仅有一个参数的时候,参数的括号可以进一步省略,当参数列表有多个参数是,括号不能省略
numbers.forEach(number => {
console.log(number);
})
2. 箭头函数隐式返回
当函数体有且仅有一个return 语句时,箭头函数可以进一步简化
numbers.forEach(number => console.log(number));
// 箭头函数语法很简洁有木有
// 上面的代码与下面是等价的
numbers.forEach(number => {
return console.log(number);
})
// 虽说返回console.log()的值不太好,但写起来更加简便,
// console.log()是没有返回值的,而且forEach()方法进行迭代也是没有返回值的
// 需要注意的是,当return值返回的是一个对象时,不能够直接使用箭头返回
// getObject = () => {name: 'zhang', age: 18}; ###错误示例,外层的大括号将被解析为代码块,因此报错
let getObject = () => ({name: 'zhang', age: 18}); // 正确示例
3. 绑定this
首先来看看js里面的this的指向问题
假定我有一个json对象如下:我需要将header与bodyList数组里的每一项拼接起来,然后在对象中定义一个concat方法
const json = {
header: 'header',
bodyList: ['body1', 'body2', 'body3'],
concat: function () {
this.bodyList.forEach(function(item){
console.log(this.header + item);
})
}
}
json.concat();
上面的代码看起来没有毛病,但执行起来结果却是出乎意料的

我们可以发现在forEach()方法中this.header的值是一个undefined
那是因为javascript的this值是在运行的时候绑定的,当函数不是作为对象的方法被调用时,函数中的this是指向window。forEach()函数时是被独立执行的,而不是由json调用的,因此forEach()中的this指向window对象,而不是json对象
针对这种情况,有以下解决方法:
// es5中的解决方法
const json = {
header: 'header',
bodiList: ['body1', 'body2', 'body3'],
conacat: function() {
// 由于concat函数是由json直接调用的,因此在此处this指向json,使用self保存当前的上下文
var self = this;
this.bodyList.forEach(function(item) {
console.log(self.header + item);
})
}
} // es6中更简单的做法是使用箭头函数绑定this
let json ={
...
concat: function() {
this.bodyList.forEach(item => {
console.log(this.header + item);
})
}
}
json.concat()
箭头函数的作用域是此法作用域,this的指向在定义的时候就已经确定,也不会随着函数的调用而改变。
2019-03-14 20:30:29
ES6箭头函数Arrow Function的更多相关文章
- es6 箭头函数(arrow function) 学习笔记
箭头函数有两个好处. 1.他们比传统函数表达式简洁. const arr = [1, 2, 3]; const squares = arr.map(x => x * x); // 传统函数表达式 ...
- [ES6系列-02]Arrow Function:Whats this?(箭头函数及它的this及其它)
[原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 如果没用过CSharp的lambda 表达式,也没有了解过ES6,那第一眼看到这样代码什么感觉? /* eg.0 * fu ...
- ES6 箭头函数(Arrow Functions)
ES6 箭头函数(Arrow Functions) ES6 可以使用 "箭头"(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 具有一个参数的简单函 ...
- 深入浅出ES6(七):箭头函数 Arrow Functions
作者 Jason Orendorff github主页 https://github.com/jorendorff 箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教 ...
- [译]ES6箭头函数和它的作用域
原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ 在ES6很多很棒的新特性中, 箭头函数 (或者大箭头函数)就是其中值 ...
- ES6箭头函数和它的作用域
原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ http://es6rocks.com/2014/10/arrow- ...
- 箭头函数 Arrow Functions/////////////////////zzz
箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...
- es6箭头函数讲解
es6箭头函数的用法 箭头函数是es6的一种函数的简写方法. 如下: var f = v = > v; //等同于 var f = function(v){ return v; } var su ...
- es6箭头函数 this 指向问题
es5中 this 的指向 var factory = function(){ this.a = 'a'; this.b = 'b'; this.c = { a:'a+', b:function(){ ...
随机推荐
- GIS开发 图形常见算法
摘录:OSGeo中国中心 http://www.osgeo.cn/post/ae457 计算机的出现使得很多原本十分繁琐的工作得以大幅度简化,但是也有一些在人们直观看来很容易的问题却需要拿出一套并不简 ...
- .net压缩文件夹
1,引用:using System.IO.Packaging; 2,压缩文件的方法: /// <summary> /// 压缩文件夹到制定的路径 /// </summary> ...
- vue 修饰符
Vue.js 为 v-on 提供了事件修饰符来处理 DOM 事件细节,如:event.preventDefault() 或 event.stopPropagation(). Vue.js通过由点(.) ...
- iOS 性能优化总结
卡顿产生的原因 在 VSync信号到来后,系统图形服务会通过 CADisplayLink等机制通知 App,App主线程开始在 CPU中计算显示内容,比如视图的创建.布局计算.图片解码.文本绘制等.随 ...
- C# Thread Lock 笔记
多线程, 当使用共有变量时, 保持计算结果正确很重要: 看下面的例子: ; //private static object objlock = new object(); public static ...
- 面试北京XX科技总结
1 面试时间与地点 面试时间:2019年1月17号,面试地点:北京. 2 公司概况 开发的产品是集团内部使用,开发的语言ts脚本语言.目前开发团队15人 ...
- Html+css学习笔记一 创建一个网页
第一个网页 新建一个记事本,把名字改成first.html <html> <head> <title>MyFristHtml</title> </ ...
- 二、 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)
请指教交流! package com.it.hxs.c01; import java.util.Stack; /* 编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek) */ ...
- Mybatis使用MySQL进行模糊查询时输入中文检索不到结果
Mybatis使用MySQL进行模糊查询时输入中文检索时,需要在jdbcURL后增加参数 ?useUnicode=true&characterEncoding=UTF-8
- 运行go服务器后台挂起(不看调试信息)
cd程序目录,shell输入go run+项目,接着键盘组合输入CTRL+Z,后台挂起进程. 要结束服务器,则输入fg,查看被挂起的go服务器进程,接着键盘组合输入CTRL+C,中断服务器进程. 此外 ...