this指向无法传递,所以函数p的this是指向window,同时因为let声明的变量不会挂载到window上 所以是window下的a变量只能是undefined

发布时间 2023-11-11 01:46:59作者: 龙陌

请问以下JS代码会做什么样的输出

let a = 'w'
let obj = {
  a: 'o',
  print: function() {
    console.log(this.a);
  },
}
let p = obj.print;
obj.print();
p();

o、undefined

官方解析:
首先明确this指向无法传递,所以函数p的this是指向window,同时因为let声明的变量不会挂载到window上
所以是window下的a变量只能是undefined。

至于obj.print方法this指向的是obj所以输出的是obj里面的变量a的值即o。

将对象的方法赋值给变量后,this指向会丢失,所以会去全局环境中找,但此题a是let声明的,,故全局中没有a