箭头函数不绑定this
箭头函数不绑定
this
,会捕获其所在的上下文的this
值,作为自己的this
值
js
1 | var id = 1 |
答案输出是1
为什么呢?
因为箭头函数this
指向等于定义时上层作用域中的this
,所以是指向最外层window
再看一个例子
js
1 | var id = 1 |
为什么他们输出结果会不一致呢?
不是说箭头函数不会被外部影响改变,call
和apply
方法对箭头函数无效吗?
接下来我们来一步步分析,为了方便大家理解,我将上述代码通过babel转换成es5来分析,如下
js
1 | // es5 |
可以看出
箭头函数里面根本没有自己的
this
,而是引用的上层作用域中this
我们通过 call
来改变 this
指向改变是其父级的 this
,箭头函数里的 this
永远的指向其父级的作用域,而我们只是通过改变其父级的 this
指针,来达到箭头函数 this
的修改
箭头函数不绑定arguments
,没有prototype
原型对象
js
1 | const f1 = function (val) { console.log(val) } |
可以发现箭头函数没有arguments
和prototype
原型对象
箭头函数不绑定
arguments
,取而代之用rest
参数…解决
js
1 | const f = (...args) => { |
箭头函数是匿名函数,不能作为构造函数,不能使用new
我们先来看看new的原理
js
1 | // new的原理 |
通过上面已知的信息,箭头函数没有prototype
,所以无法使实例的__proto__
指向其构造函数的原型