箭头函数的this

本文介绍了ES6中的箭头函数,包括其简洁的语法以及与传统函数不同的this指向问题。通过示例展示了箭头函数在处理单一及多个参数的情况,并强调了当函数体只有一行时的特殊写法。同时,文中提到了箭头函数的this指向与普通函数的区别,并通过图表辅助理解这一关键特性。
摘要由CSDN通过智能技术生成

文章目录

  • 一、熟悉箭头函数
    • 1.传一个参数
    • 2.传多个参数
  • 二、this指向问题
  • 总结


一、熟悉箭头函数

箭头函数是ES6新增的语法,当准备把函数作为参数传递时,用箭头函数看起来会比较简洁,简洁,但是可读性略差(尤其是它被省略的根本不像个函数的时候).

1.传一个参数

  const 函数名 = 参数 => {
    xxx函数体
    xxx函数体
  }

  const 函数名 = (参数) => {
    xxx函数体
    xxx函数体
  }

2.传多个参数

const 函数名 = (1,2) => {
xxx函数体
xxx函数体
}

更离谱的是如果函数体只有一行,你可以不写大括号.
导致有时候会写出来一些看着不太像函数的函数:

aaa = num => num * num
render: h => h(App)

二、this指向问题

箭头函数的this指向与用其他写法的函数不同

箭头函数中的this引用的是距离最近的作用域中的this,从this的所在处向外层层寻找,直到有this的定义.
        const obj = {
            aaa() {
                setTimeout(function () {
                    console.log(this);
                })
                setTimeout(() => {
   /* 由自身所在的作用域向外寻找最近的作用域,
      是aaa(),其中的this指向obj{}; */
                    console.log(this);
                })
            }
        }
        const obj2 = {
            aaa() {
            //aaa(),它的this指向obj2;
                setTimeout(function () {
                //setTimeout内部的this永远指向window;
                    setTimeout(function () {
                        console.log(this);//window
                    })
                    setTimeout(() => {
                        console.log(this);
/* window,向外寻找,最先找到的setTimeout的作用域,
而这个作用域里的this永远指向window. */
                    })
                })

                setTimeout(() => {
                    setTimeout(function () {
                        console.log(this);//window
                    })
                    setTimeout(() => {
                        console.log(this);
/* obj,向外找到setTimeout,但是是一个箭头函数,
其中没有this,再向外寻找,aaa()的this,即obj */
                    })
                })
            }
        }

为了方便大家看懂最后一个栗子,我拿PS画了个图…
渣技术力,问就是PS课都拿来写代码了…
图中左右两个箭头分别对应第2和4个箭头函数
在这里插入图片描述


总结

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值