关于函数的问题,请各位专家解答!

请问各位,console出来的为什么是window,不是obj,是与匿名函数、代码块的执行销毁有关吗

img

这是因为在全局作用域中,函数的上下文默认为 window 对象,所以当在全局作用域中调用函数时,函数内的 this 指向 window 对象。

在代码块中定义的函数会将它们的上下文绑定到全局作用域中,因此它们的 this 也是 window 对象。

如果想让函数内的 this 指向对象 obj,需要使用 call、apply 或 bind 等方法明确地将 this 绑定到 obj 上。

img


let obj = {
  getThis:function(){
    return function(){
      console.log(this)
    }
  }
  ,showThis:function(){
    console.log(this)
  }
}

你可以看到,getThis 返回的是一个方法,这个方法执行后,this指向的是调用对象,所以在控制台调用这个方法时,会返回 window,而showThis 则是明确指向自己

因为你调用方法的位置是window