首页 > js中this的指向问题

js中this的指向问题

//第一个例子

var a = {
    animate: function(){
        window.requestNextAnimationFrame(this.animate);
        //运行两次后this指向会变,this的变化是怎样的?
    }
}

a.animate()

你真想做前端还是买本犀牛书好好看看先吧!


1)这个问题和闭包无关
2)要理解这个问题先要理解一下操作的行为

var name="global";
var foo={
    name:"foo",
    fun:function(){
        console.log(this.name);
    }
}
foo.fun();//输出 foo
var fun=foo.fun;//1
fun();//输出 global

执行1出的代码后,fun指向的是一个函数对象,这个函数对象不再是foo的方法,已经和foo对象没有一点关系了
那么理解了上面的代码,你的问题也就解决了

var a = {
    animate: function(){
        window.requestNextAnimationFrame(this.animate);//2
    }
}
a.animate();//1

1处代码执行是,对象a的animate属性指向的函数对象将作为a的方法被执行,那么此时的this就为a对象
那么在2处执行是this.animate表达式执行后animate将与a对象说再见了,等到animate指向的函数对象再次被执行的时候this指向什么从代码中就无从得知了


老有人问闭包的问题


简单来说:
执行到,a.animate() 里面的 this 确实是 a

但下一次执行annimaterequestNextAnimationFrame 添加的事件函数,调用的,所以annimate中的thiswindow 或是 null
http://zonxin.github.io/post/2015/11/javascript-this/


右边相似问题里面有很多

【热门文章】
【热门文章】