对箭头函数中this的一些讨论
先看道题
var obj = { hi: function(){ console.log(this); return ()=>{ console.log(this); } }, sayHi: function(){ return function() { console.log(this); return ()=>{ console.log(this); } } }, say: ()=>{ console.log(this); } } let hi = obj.hi(); //输出obj对象 hi(); //输出obj对象 let sayHi = obj.sayHi(); let fun1 = sayHi(); //输出window fun1(); //输出window obj.say(); //输出window
1.隐式绑定,this绑定在obj上,所以输出obj
2.箭头函数的this在定义的时候就确定了
当执行到
这一步时,箭头函数就已经定义了,这个时候箭头函数外部的this还是obj;需要注意的是如果在这把箭头函数换成普通函数,函数中的this将指向window,因为在运行到
这一步时,出现了隐式绑定丢失,hi中的this已经改变为window
3.在执行到这一步的时候就出现了上面讲的隐式绑定丢失,函数的执行上下文是window,同时在这一步,箭头函数开始定义(并没有执行),定义的时候外层环境的this已经指向window了
4.箭头函数定义的时候外层环境的this已经指向window了,所以输出window
5.箭头函数自身没有this,往上找就找到了全局的this(这一步困扰我好久,以前光知道箭头函数自身没有this,没有细想,搞明白这里才想明白原来this是函数提供的...)

浙公网安备 33010602011771号