老师,这个面试题答案是什么

来源:6-4 this 有几种赋值情况

慕头不大

2021-10-28

const obj = {
 x:1,
 print1:()=>{
  console.log(this.x)
 },
 print2(){
  console.log(this.x)
 },
 print3:function(){
  console.log(this.x)
 }.bind(this)
}

obj.print1()
obj.print2()
obj.print3()
想知道this分别指向什么,为什么

写回答

1回答

双越

2021-10-28

print1 使用的是箭头函数,this 会指向函数定义时作用域,即 window

print2 很好理解

print3 的 bind(this) ,this 此时指向的也是函数定义时的作用域,即 window


可以换一种写法,你就能明白了。

const t = this

const obj = {
 x:1,
 print1:()=>{
  console.log(t.x)
 },
 print2(){
  console.log(this.x)
 },
 print3:function(){
  console.log(this.x)
 }.bind(t)
}


1
6
Jiuns
回复
qq_慕少8048267
我的理解是, const obj = { x:1, // 创建obj对象时,这个箭头函数不受当前obj{}作用域限制,跳到window对象了,this属于window print1:()=>{ console.log(this.x) }, // 已下两种方式等价,是属于在obj内定义的对象(不是回调),this属于obj print2(){ console.log(this.x) }, print25: function (){ console.log(this.x) }, // 定义时匿名函数被指向了window的作用域,所以内部变成了window print3: function(){ console.log(this.x) }.bind(this) } obj.print1() // undefind obj.print2() // 1 obj.print25() // 1 obj.print3() // undefind
2022-07-31
共6条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4694 学习 · 1681 问题

查看课程