这篇文章主要介绍了关于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二次触发的问题
以上就是关于js中定时器里面的作用域问题的详细内容,更多请关注【创想鸟】其它相关文章!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。