关于vue 中调用setTimeout方法的this指向问题

setTimeout是window 上的方法,但是在vue中的生命周期钩子函数中,this的指向是vue 实例,那么为什么还可以调用setTimeout?

外部声明了一个变量a,函数内部没有声明,但一样可以用,因为函数作用域没有这个a变量,他会向上层作用域查找,找到就找到了,找不到就报错。

这里也是一样,vue钩子函数里是没有这个setTimeout这个函数,但是他向上找到window上可以找到

最后,this是this,作用域是作用域,他俩不是一个东西,this是作用域的一部分,这里如果你使用的是this.setTimeout反而找不到了,会报错

在js中设定了定时器,时间到了后,会由window去调用定时器的函数并执行,所以定时器中this的指向是window

  • 请看👉 :Vue实例中,setTimeout()不生效怎么解决
  • 除此之外, 这篇博客: vue使用setTimeout【function中的this失效】中的 在vue中使用setTimeout在function中直接使用this无效。正确的使用方法是: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  •   data(){
      	return{
      		message:"这是一条消息"
      	}
      },
      methods: {
      	func(){
      		var _this = this;    //定义_this暂存this
            setTimeout(function(){
              console.log(_this.message);
            },"500");
      	}
      }
    

    这是由于setTimeout函数调用的代码运行在与所在函数完全分离的执行环境上,这会使得this指向的是window对象。