//第一个例子
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
但下一次执行annimate
是requestNextAnimationFrame
添加的事件函数,调用的,所以annimate
中的this
是window
或是 null
http://zonxin.github.io/post/2015/11/javascript-this/
右边相似问题里面有很多