zoukankan      html  css  js  c++  java
  • 关于setInterval和setTImeout中的this指向问题

    前些天在练习写一个小例子的时候用到了定时器,发现在setInterval和setTimeout中传入函数时,函数中的this会指向window对象,如下例:

    var num = 0;
    function Obj (){
        this.num = 1,
        this.getNum = function(){
            console.log(this.num);
        },
        this.getNumLater = function(){
            setTimeout(function(){
                console.log(this.num);
            }, 1000)
        }
    }
    var obj = new Obj; 
    obj.getNum();//1  打印的是obj.num,值为1
    obj.getNumLater()//0  打印的是window.num,值为0
    

    原因

    setTimeout使用了匿名函数,匿名函数的this指向为window

    解决方法

    箭头函数
    var num = 0;
    function Obj (){
        this.num = 1,
        this.getNum = function(){
            console.log(this.num);
        },
        this.getNumLater = function(){
            setTimeout(() => {
                console.log(this.num);
            }, 1000)    //箭头函数中的this总是指向外层调用者,也就是Obj
        }
    }
    var obj = new Obj; 
    obj.getNum();//1  打印的是obj.num,值为1
    obj.getNumLater()//1  打印的是obj.num,值为1
    
  • 相关阅读:
    Redis单机操作
    Scala
    RDD算子
    Python学习之旅(七)
    python学习之旅(六)
    python学习之旅(五)
    python学习之旅(四)
    python学习之旅(二)
    python学习之旅(三)
    Python学习之旅(一)
  • 原文地址:https://www.cnblogs.com/IT123/p/10910912.html
Copyright © 2011-2022 走看看