果然,隔了很长时间都没有来博客园上逛了......

  前一段时间一直在忙我们参加的一个比赛,转眼已经好久没有来逛过博客园了,果然还是很难坚持的......

  今天总算还是想起来要过来冒个泡,强行刷一波存在感......

------------------------------------以上全是废话----------------------------------------------------

  箭头函数时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的更多相关文章

  1. es6 箭头函数(arrow function) 学习笔记

    箭头函数有两个好处. 1.他们比传统函数表达式简洁. const arr = [1, 2, 3]; const squares = arr.map(x => x * x); // 传统函数表达式 ...

  2. [ES6系列-02]Arrow Function:Whats this?(箭头函数及它的this及其它)

    [原创] 码路工人 大家好,这里是码路工人有力量,我是码路工人,你们是力量. 如果没用过CSharp的lambda 表达式,也没有了解过ES6,那第一眼看到这样代码什么感觉? /* eg.0 * fu ...

  3. ES6 箭头函数(Arrow Functions)

    ES6 箭头函数(Arrow Functions) ES6 可以使用 "箭头"(=>)定义函数,注意是函数,不要使用这种方式定义类(构造器). 一.语法 具有一个参数的简单函 ...

  4. 深入浅出ES6(七):箭头函数 Arrow Functions

    作者 Jason Orendorff  github主页  https://github.com/jorendorff 箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教 ...

  5. [译]ES6箭头函数和它的作用域

    原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ 在ES6很多很棒的新特性中, 箭头函数 (或者大箭头函数)就是其中值 ...

  6. ES6箭头函数和它的作用域

    原文来自我的前端博客: http://www.hacke2.cn/arrow-functions-and-their-scope/ http://es6rocks.com/2014/10/arrow- ...

  7. 箭头函数 Arrow Functions/////////////////////zzz

    箭头符号在JavaScript诞生时就已经存在,当初第一个JavaScript教程曾建议在HTML注释内包裹行内脚本,这样可以避免不支持JS的浏览器误将JS代码显示为文本.你会写这样的代码: < ...

  8. es6箭头函数讲解

    es6箭头函数的用法 箭头函数是es6的一种函数的简写方法. 如下: var f = v = > v; //等同于 var f = function(v){ return v; } var su ...

  9. es6箭头函数 this 指向问题

    es5中 this 的指向 var factory = function(){ this.a = 'a'; this.b = 'b'; this.c = { a:'a+', b:function(){ ...

随机推荐

  1. 20190320_head first pyhton学习笔记之构建发布

    1.把代码nester.py放入文件夹nester中,在文件夹中再新建一个setup.py文件,文件内容如下: from distutils.core import setup setup( name ...

  2. what API can do

    APIs for manipulating documents loaded into the browser. The most obvious example is the DOM (Docume ...

  3. MySQL 8 配置文件

    包括功能: 端口,是否启用bin log , 指定目录, InnoDB是否启用压缩,MySQL使用旧的密码验证方式. 说明,建表的时候要添加必要的参数才会启用表数据压缩存储,以下为例: CREATE ...

  4. JavaScript判断苹果 iPhone X Series 机型

    原文链接: JavaScript 判断 iPhone X Series 机型 现状 iPhone X 底部是需要预留 34px 的安全距离,需要在代码中进行兼容. 现状对于 iPhone X 的判断基 ...

  5. ajax post json格式返回

    Ajax.aspx: Response.ContentType = "application/json"; Response.Write("{result: '" ...

  6. Response.End ,Response.Redirect、Server.Transfer 引发 “正在中止线程”异常的问题

    google后得知:Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件,同时抛出ThreadAbortExcepti ...

  7. 关于Javascript中页面动态钟表的简单实现

    1.问题并不繁琐,在于HTML中 DOM(文档对象模型)方法的掌握,我的钟表实现重点用到了三个函数和一个事件 A)setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式.s ...

  8. 略解ByteBuf

    说到ByteBuf,我们并不陌生,官网给的解释为,一个可以进行随机访问或者是顺序访问的字节集合,它是NIO buffers缓冲的底层抽象.既然是底层抽象,那么我们就可以基于其衍生出很多的具体实现出来, ...

  9. 总结const、readonly、static三者的区别

    const:静态常量,也称编译时常量(compile-time constants),属于类型级,通过类名直接访问,被所有对象共享! a.叫编译时常量的原因是它编译时会将其替换为所对应的值: b.静态 ...

  10. Unity中用Mono插件解析xml文件

    1.解压压缩包,把文件夹拖到脚本文件夹下 Mono是第三方基金会开发的开源的东西,通过Mono基础上开发的程序可以在各个系统下运行.开发语言是C#. 用插件解析比较高效,平台运行稳定.使用简单. Un ...