箭头函数相当于匿名函数,简化了函数定义。

箭头函数有两种写法,当函数体是单条语句的时候可以省略{}和return。

另一种是包含多条语句,不可以省略{}和return。

特点

箭头函数最大的特点就是没有this,所以this是从外部获取,就是继承外部的执行上下文中的this,由于没有this关键字所以箭头函数也不能作为构造函数, 同时通过 `call()` 或 `apply()` 方法调用一个函数时,只能传递参数(不能绑定this),第一个参数会被忽略。

箭头函数也没有原型和super。不能使用yield关键字,因此箭头函数不能用作 Generator 函数。不能返回直接对象字面量。

箭头函数的不适用场景:

定义对象上的方法 当调用` dog.jumps` 时,`lives` 并没有递减。因为 `this` 没有绑定值,而继承父级作用域。 var dog = { lives: 20, jumps: () => { this.lives--; } }

不适合做事件处理程序 此时触发点击事件,this不是button,无法进行class切换 var button = document.querySelector('button'); button.addEventListener('click', () => { this.classList.toggle('on'); });

箭头函数函数适用场景:

简单的函数表达式,内部没有this引用,没有递归、事件绑定、解绑定,适用于map、filter等方法中,写法简洁 var arr = [1,2,3]; var newArr = arr.map((num)=>num*num)

内层函数表达式,需要调用this,且this应与外层函数一致时

let group = { title: "Our Group", students: ["John", "Pete", "Alice"], showList() { this.students.forEach( student => alert(this.title + ': ' + student) ); } };

group.showList();

this关键字由来:在对象内部的方法中使用对象内部的属性是一个非常普遍的需求。但是 JavaScript 的作用域机制并不支持这一点,基于这个需求,JavaScript 又搞出来另外一套 this 机制。

this存在的场景有三种:全局执行上下文和函数执行上下文和eval执行上下文,eval这种不讨论。

在全局执行环境中无论是否在严格模式下,(在任何函数体外部)`this` 都指向全局对象。

在函数执行上下文中访问this,函数的调用方式决定了 `this` 的值。在全局环境中调用一个函数,函数内部的 this 指向的是全局变量 window,通过一个对象来调用其内部的一个方法,该方法的执行上下文中的 this 指向对象本身。

普通函数this指向:当函数被正常调用时,在严格模式下,this 值是 undefined,非严格模式下 this 指向的是全局对象 window;通过一个对象来调用其内部的一个方法,该方法的执行上下文中的 this 指向对象本身。new 关键字构建好了一个新对象,并且构造函数中的 this 其实就是新对象本身。嵌套函数中的 this 不会继承外层函数的 this 值。

箭头函数this指向:箭头函数并不会创建其自身的执行上下文,所以箭头函数中的 this 取决于它的外部函数。

箭头函数因为没有this,所以也不能作为构造函数,但是需要继承函数外部this的时候,使用箭头函数比较方便

最新文章

  1. python 文件包含
  2. iOS开发拓展篇—音频处理(音乐播放器5)
  3. HTML快速入门3
  4. com组件接口
  5. centos 格式化硬盘并挂载,添加重启后生效
  6. MySQL(11):存储引擎
  7. Linq的查询操作符
  8. Android学习笔记:如何高效显示图片,避免内存溢出 和 ImageView无法显示大尺寸的图片
  9. vc中关于 directx的配置,和dxsdk_extras(directshow)
  10. Vue入门
  11. 实现mypwd
  12. SQL Server2012中如何通过bak文件还原SQL Server2012数据库
  13. VS 错误: 未找到与约束contractname Microsoft.VisualStudio.Utilities.IContentTypeRegistryService
  14. Tomcat & Servlet
  15. CSS学习笔记-04 a标签-导航练习
  16. ffmpeg 编码(视屏)
  17. python list和函数之间的复制和原地址修改问题
  18. Java使用AES加密解密
  19. Linux下umask的缺省默认权限
  20. 在ubuntu 18.04下,无线网卡无驱动,连不上wifi,显示wifi没有适配器的解决方法

热门文章

  1. element-ui学习之-------input表单验证【各种情况总结】
  2. reduce对数组及数组对象的常见操作
  3. js array map
  4. usb 2.0 packet
  5. centos7.6安装rz命令上传文件
  6. [Oracle19C ASM管理] ASM的网络服务
  7. solt废弃,报错解决方法
  8. Redis后端面试题
  9. redis获取图形验证码
  10. C语言-Windows定时关机小程序