跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

关于js中定时器里面的作用域问题

这篇文章主要介绍了关于js中定时器里面的作用域问题,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
/* 各种运动 */ function Animation(){}; Animation.prototype={ /* 匀速运动 */ linear:function(obj,target){ obj.timer=null; clearInterval(obj.timer); var step=obj.offsetLeft
我当时就想咋回事呢  明明函数是定义在Animation里面的  方法也是由它调用的  所以this应该指向的是Animation呀 于是乎我就继续往下看  看打了 奥,明白了  setTimeout 和 setInterval 一般都是这么写 timer=setTimeout(function(){},1000/60); 形成了闭包  闭包里面的普通函数  作用域是window 所以在window下执行fn  那么this 就是window 而linear是定义在Animation里面的  所以找不到函数  报错 如果把fn函数的作用域绑定在Animation上 就没关系了
var fn=arguments.callee.bind(this); 当调用loop的时候 this指的就是Animation 如果没明白 我再举一个简单的例子 var obj={ age:"17; } setInterval(function(){ console.log(this.age); }.bind(obj),1000);
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网! 相关推荐: 对于JavaScript中DOM对象的分析 如何解决angular分页插件tm.pagination二次触发的问题

相关文章