箭头函数是es6中新增的语法,他与普通的函数最大的区别在于this的指向。代码:
"use strict"var fn1 = ()=>{ console.log(this);//window}fn1();var fn2 = function(){ console.log(this);//undefined}fn2();
在代码中我们使用了严格模式。普通的函数的this在执行时指向为undefined(非严格模式下指向为window),而箭头函数的this指向为window,继承了父级作用于的this指向。
但是当我们通过call和apply来改变剪头函数的执行作用域时,this的指向会指向父级的this指向还是指定的指向呢?
"use strict"var a = { };var fn1 = ()=>{ console.log(this);//window}fn1.call(a);
我们发现this的指向仍然为window。
其实普通的函数的this值根据我们调用的环境确定this的指向,而箭头函数在我们创建时就确定了this的指向,不会由于调用环境发生变化而改变this的指向。
本文不合理的地方还望大神指正!