关于this的面试题
箭头函数自己没有this,它的 this 指向函数创建的时候它所在的作用域空间中的this

(1):

当我们在调用 obj.fun() 的时候,就会去创建 innerFunc() 的作用域空间,这时候就会确定了 innerFunc中的this;
this指向的是 obj 对象:
故此题:
// this -> obj -> local
(2)

语句2的 fun 是一个全局变量,它是在 window 空间下的

innerFunc的创建时必须要调用 func();
当我们去调用第一个func()的时候,我们发现fun函数处在全局作用域环境中,他在调用时,this指向wind

在调用第二个 fun()时,即 func()() ,则 this 指向 window
输出 global:

(3)

因为bind本身就会返回一个函数,可以先写成:

通过上图,先将func绑定下this,再通过newFunc去执行:

这表明当我们去定义 newFun 的时候,他其中的 this 的指向已经变了,他的this 会指向传入的自定义的对象值 :
{ _name: 'newObj' }

当我们去调用 newFunc() ,他就会返回 innerFunc,innerFunc后面又进行调用,就会输出 _name的值,因为在我们定义的时候this就已经指向了{ _name: 'newObj' },故_name: newObj

故输出的结果为newObj
(4)



于是同语句2相同,分析也同语句2 ,故输出 global
(5)
this 一旦被 bind 后,就不会再被 call 和 apply修改


浙公网安备 33010602011771号