在ES3中,声明函数:
在ES6中,新增的箭头函数只能做赋值,不能做声明。有三种写法。
ES3:支持this。
ES6:也支持this,但是用箭头函数弱化了this的用法。
再次认识this之前,先认识下arguments对象。
依旧用这个函数,这次不打印参数,我们直接打印this。
我们传了参数p1 和 p2,但是我们并没有传this,this是什么?this是哪里来的?为什么可以打印this不报错?(先把大脑放空,你不认识this)。
那么我们再传两个值试试?
如果我们把this当做和p1 p2一样,当做参数,是不是就是打印 1 2 "aaa"呢?是不是感觉这个this是一个特殊的参数呢?仿佛隐身了一般,隐式的传参,也就是在调用的时候,像是在xxx(不可见的某某某, p1, p2)。
当我们在调用一个函数的时候,我们不知道是谁在调用它。那么,在我们不知道是谁在调用它的时候,怎么获取它呢? 其实是可以使用第一个参数来获取,第一个参数必须传调用者的名字。但是这么名字不需要传,JS默认的是帮我们传了。this就是.前面的那个某某某。
如图中xxx3,前面没有.,但是它是Window的方法,所以其实是http://Window.xxx(); 打印出来的this,就是.xxx前的Window对象。
再看下例:
这里调用的hi,.hi前面是obj,所以,这里打印出来的this,便是obj。
其实,JS是接受this的。但是,这个obj是隐藏的。
那么我们为什么知道this的值呢?因为我们在obj.hi()的时候,我们知道obj是作为this传进来的。this是被隐藏起来的,我们只能看到p1 p2。
obj.hi(1, 2) 等价于 obj.hi.call( obj , 1, 2)
this的确定方式,和p1 p2的确定方式一样,必须看是谁调用的。
因为这个this是可变的,所以可以在外层用个变量把它保存下来。
箭头函数就是为了解决this的坑
箭头函数没有隐藏的this,没有this的概念。
箭头函数,给它传this,它也不要,外面的this是谁,在箭头函数里面就是谁。没有任何隐藏的参数。
如果想要用外面的this
就得必须显式的把this传过去
用了箭头函数之后,怎么使用a变量的,就可以怎么使用this。
vue中不要在选项属性或回调上面使用箭头函数,因为vue 依赖this。可以在里面使用,最外面那层不要用。