js中this的指向问题

//第一个例子

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

a.animate()
阅读 4k
5 个回答

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指向什么从代码中就无从得知了

右边相似问题里面有很多

老有人问闭包的问题

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题