js this 指向该如何理解?

作者站长头像
站长
· 阅读数 6
function fun() {
  return () => {
    return () => {
      return () => {
        console.log(this.name)
      }
    }
  }
}
var f = fun.call({ name: 'foo' })
var t1 = f.call({ name: 'bar' })()()
var t2 = f().call({ name: 'baz' })()
var t3 = f()().call({ name: 'qux' })

是否可以理解为在执行var f = fun.call({ name: 'foo' })的时候,就已经是绑定了 { name: 'foo' },此后不会再改变

回复
1个回答
avatar
test
2024-07-10

fun() 内部的调用都是箭头函数,箭头函数没有自己的 this 上下文,所用的都是 fun 的 this 上下文。fun 的 this 由其调用决定:

fun.call(fun.call({ name: 'foo' }) 给了 fun 一个 this{ name: "foo" },而且它并不是调用完就丢了,是存到了 f 里。不过 f 是一个箭头函数,用的 fun 调用时确定的 this,即 { name: "foo" }

剩下的都是基于 f箭头函数调用,都是同一个 this,即 { name: "foo" }

参阅:JavaScript 的 this 指向问题深度解析 - 边城客栈 - SegmentFault 思否

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容