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(){ ...
随机推荐
- 开发者的自测利器-Hprof命令(寻找cpu热点)
测试代码: public class HProfTest { public void slowMethod() { try { Thread.sleep(1000); } catch (Excepti ...
- elementUi中的计数器ele-mumber中的change事件传参及事件调用
业务场景是需要在点击业务工作量的时候设置任务工作量这一项的评分不能大于任务质量及任务时限的权重之和除以二 上代码 JS逻辑代码 因出现弹出层提示后设置输入框的值如果大于sum的值,设置输入的值为sum ...
- jmeter进行简单性能测试
本文使用jmeter做一个简单的压力测试. 压力测试的步骤:1.录制脚本或编写脚本:2.自定义参数:3.场景设计:4.使用控制器模拟用户:5.使用监听,查看测试结果 以10个用户登录http://ww ...
- CentOs 6.8配置yum源
1:使用root权限,从根目录到yum.repo.d文件下 cd etc/yum.repos.d 2.备份ContOS.repo mv CentOS-Base.repo CentOS-Base.rep ...
- CRM 员工创建并分配用户
REPORT zjp_emp_upload. TABLES: sscrfields. DATA:gt_excel_data TYPE TABLE OF zalsmex_tabline, gs_exce ...
- macaca 初试
看到macaca的介绍,在移动端和PC端的自动化UI测试都同时支持, 联想到最近的行业都是同时对移动端和PC端(较少,几乎不维护)追求UI自动化测试,打算拿来试一下. 首先上macaca的地址:htt ...
- python网络爬虫&&爬取图片
爬取学院官网数据from urllib.request import * #导入所有request urllib文件夹,request只是里面的一个模块from lxml import etree # ...
- PHP的json_encode()函数与JSON对象
一.问题描述 这周搬砖的时候,前端通过ajax获取后端的数据后,照例用 对象.属性 的方式取值,然而结果总是总是不能如预期般展示在页面上. 先写个 demo 还原下场景:选中一个下拉框列表选项后,会在 ...
- 略解TCP乱序和丢包
在使用基于TCP实现的各种组件的时候,我们经常会处理数据包.这数据包说来奇怪,从来不会丢失,也不会乱序,只会产生粘包.底层的机制是如何实现的呢?进来我们就来用简洁易懂的文字描述清楚. 在TCP数据包设 ...
- SQL SEVER 开窗函数总结
作为一名刚刚入门的开发人员,要学的东西很多很多,有些无从下手.秉着“问题是病.技术是药.对症下药”的原则,将工作中遇到的问题所需的技术进行梳理.归纳和总结. 一.什么是开窗函数 首先,什么是开窗函数, ...