箭头函数与普通函数的this指向,箭头函数的特点和好处

箭头函数特点

  • this的指向问题,函数体内的this对象,就是定义是所在的对象,而不是使用时所在的对象。箭头函数里面没有自己的this,而是引用外层的this,所以也不能用call、apply、bind方法去改变this指向

  • 不可以当做构造函数,也就是说不能new,否则报错

  • 不存在arguments对象,如果要用就用rest参数代替

  • 不能使用yield命令,因此箭头函数不能用作Generator函数

箭头函数的好处

  • 简化了写法:各种简洁写法(注:部署管道机制,即前一个函数的输出是后一个函数的输入)

  • 普通函数里各种this指向,对于this的写法容易导致编程风格混淆的问题

    • 只使用词法作用域并完全抛弃错误的this风格的代码
    • 完全采用this风格,在必要时使用bind,尽量避免使用self=this和箭头函数
    • 普通函数各种this指向,容易造成this指向被隐式改变的问题

箭头函数与普通函数的区别

  • 箭头函数的this指向是在函数创建的时候生成的

  • 普通函数的this指向是在调用的时候生成的

  • 箭头函数不使用this的四种标准规则,而是根据外层(函数或者全局)作用域来决定this。它用更常见的此法作用域取代了传统的this机制,他会根据当前的词法作用域来决定this,具体来说箭头函数会继承外层函数调用的this绑定(无论this绑定到什么)。这其实和ES6之前代码中的selt=this机制一样。

(注:词法作用域是由你写代码时将变量和块作用域写在哪里来决定的)

普通函数this指向

  • 注:学会从调用栈中分析出真正的调用位置,因为它决定了this的绑定
  • 默认绑定:独立函数调用

    • 非严格模式下:this指向全局对象(window)
    • 严格模式use strict下:this指向undefined
  • 隐式绑定

    • 调用位置是否有上下文对象,若有,函数调用中的this绑定到这个上下文对象

    • 缺点:被隐式绑定的函数会丢失绑定对象,也就是说会应用默认绑定

  • 显示绑定

    • 用call、apply、bind,把函数的this指向强制绑定到新的对象上(传入的对象不为null、undefined)

  • new绑定

    • 使用new来调用一个函数foo,我们会构造一个新对象并把它绑定到foo调用中的this上

  • 优先级:new绑定>显示绑定>隐式绑定>默认绑定

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值