面试题答案
一键面试-
两次
console.log(innerFunc())
输出的值:- 第一次
console.log(innerFunc())
输出1
。 - 第二次
console.log(innerFunc())
输出1
。
- 第一次
-
箭头函数中
this
的绑定规则:- 箭头函数没有自己的
this
,它的this
在定义时继承自外层作用域(词法作用域)。也就是说,箭头函数的this
指向定义它时所处的外层执行上下文的this
,且不会被call
、apply
、bind
等方法改变。
- 箭头函数没有自己的
-
上述代码执行过程中
this
指向的变化:- 首先,定义了对象
outer
,其getValue
方法返回一个箭头函数。当const innerFunc = outer.getValue();
执行时,箭头函数定义在outer.getValue
函数内部,此时它的this
继承自outer.getValue
函数的this
,而outer.getValue
作为outer
对象的方法调用,这里的this
指向outer
对象。所以箭头函数内部的this.value
实际上指的是outer.value
,值为1
,因此第一次console.log(innerFunc())
输出1
。 - 接着,定义了
newOuter
对象,并执行innerFunc.call(newOuter);
。由于箭头函数的this
绑定在定义时就确定了,不会被call
方法改变,所以innerFunc
内部的this
依然指向定义它时的outer
对象,而不是newOuter
对象。因此第二次console.log(innerFunc())
输出还是1
。
- 首先,定义了对象