关于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修改

 

posted @ 2022-03-16 21:38  方头小小狮  阅读(70)  评论(0)    收藏  举报