es6箭头函数_再学ES6(二):箭头函数、this

在ES3中,声明函数:

a62f97d8337ff5acb2873098fa5c53a5.png

在ES6中,新增的箭头函数只能做赋值,不能做声明。有三种写法。

1deda239e29d46892d9eb77b284b512c.png

ES3:支持this。

ES6:也支持this,但是用箭头函数弱化了this的用法。

再次认识this之前,先认识下arguments对象。

5c107c1862f45ea562212749cc8421b9.png

依旧用这个函数,这次不打印参数,我们直接打印this。

6153abd5a5fd26bb1757a84cbc1b2804.png

我们传了参数p1 和 p2,但是我们并没有传this,this是什么?this是哪里来的?为什么可以打印this不报错?(先把大脑放空,你不认识this)。

那么我们再传两个值试试?

7c8e3eb6dab0851bde4b97bad26441fd.png

如果我们把this当做和p1 p2一样,当做参数,是不是就是打印 1 2 "aaa"呢?是不是感觉这个this是一个特殊的参数呢?仿佛隐身了一般,隐式的传参,也就是在调用的时候,像是在xxx(不可见的某某某, p1, p2)。

当我们在调用一个函数的时候,我们不知道是谁在调用它。那么,在我们不知道是谁在调用它的时候,怎么获取它呢? 其实是可以使用第一个参数来获取,第一个参数必须传调用者的名字。但是这么名字不需要传,JS默认的是帮我们传了。this就是.前面的那个某某某。

如图中xxx3,前面没有.,但是它是Window的方法,所以其实是http://Window.xxx(); 打印出来的this,就是.xxx前的Window对象。

再看下例:

cc061cea63a8e89b05a3029c35c487b9.png

这里调用的hi,.hi前面是obj,所以,这里打印出来的this,便是obj。

其实,JS是接受this的。但是,这个obj是隐藏的。

1174e36eac230039e57bffd34abd4bb8.png

那么我们为什么知道this的值呢?因为我们在obj.hi()的时候,我们知道obj是作为this传进来的。this是被隐藏起来的,我们只能看到p1 p2。

obj.hi(1, 2) 等价于 obj.hi.call( obj , 1, 2)

this的确定方式,和p1 p2的确定方式一样,必须看是谁调用的。

82d2ffdd56d4d6cdcbc100b3bc624bb8.png

因为这个this是可变的,所以可以在外层用个变量把它保存下来。

31c110a5f64327a2715bc3859f135112.png

箭头函数就是为了解决this的坑

箭头函数没有隐藏的this,没有this的概念。

0a1030c2795a747c9be62f7120de781c.png

箭头函数,给它传this,它也不要,外面的this是谁,在箭头函数里面就是谁。没有任何隐藏的参数。

0a5d641bd4c19371fecc393cab073e2c.png

如果想要用外面的this

71cf5b2448eaebbb257a293550cb7e24.png

就得必须显式的把this传过去

4de20f68dc8cd015afc62ff170c28ccd.png

用了箭头函数之后,怎么使用a变量的,就可以怎么使用this。

70dd71db0de39d3f0cf9fd4c953acb2e.png

vue中不要在选项属性或回调上面使用箭头函数,因为vue 依赖this。可以在里面使用,最外面那层不要用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值