//第一个例子
var a = {
animate: function(){
window.requestNextAnimationFrame(this.animate);
//运行两次后this指向会变,this的变化是怎样的?
}
}
a.animate()
//第一个例子
var a = {
animate: function(){
window.requestNextAnimationFrame(this.animate);
//运行两次后this指向会变,this的变化是怎样的?
}
}
a.animate()
简单来说:
执行到,a.animate()
里面的 this
确实是 a
但下一次执行annimate
是requestNextAnimationFrame
添加的事件函数,调用的,所以annimate
中的this
是window
或是 null
http://zonxin.github.io/post/2015/11/javascript-this/
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
1)这个问题和闭包无关
2)要理解这个问题先要理解一下操作的行为
执行1出的代码后,fun指向的是一个函数对象,这个函数对象不再是foo的方法,已经和foo对象没有一点关系了
那么理解了上面的代码,你的问题也就解决了
1处代码执行是,对象a的animate属性指向的函数对象将作为a的方法被执行,那么此时的this就为a对象
那么在2处执行是
this.animate
表达式执行后animate将与a对象说再见了,等到animate指向的函数对象再次被执行的时候this指向什么从代码中就无从得知了