JavaScript-js 回调 异步 求解
cout是个对象,$this指向cout的this对象避免与dom对象冲突,整个方法就是单击<div class=".bb">200</div> 获得倒数的起始值($this.name),开始倒数。
var cout = {
init:function (classname) {
var $this = this
if (classname) {
var classname = classname
}
else {
var classname = ".bb"
}
$(document).delegate(classname, "click", function () {
$this.pri(this)
})
},
pri:function (obj) {
var $this = this
function temp() {
$this.name = parseInt($(obj).text())
$this.name = $this.name - 1
var temp = arguments.callee
$(obj).html($this.name)
if ($this.name > 0) {
window.setTimeout(function () {
temp()
}, 100)
}
}
temp()
}
}
cout.init(".bb")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
你这样写没必要用$this.name阿 这样写不是更好懂 嘻嘻:
......function temp() {
var cc= parseInt($(obj).text()) ;
cc = cc - 1 ;
$(obj).html(cc);
if (cc > 0) {
window.setTimeout(function () {
temp()
}, 100)
}
}.....
其实用对象的写法的话 每一个div的点击回调中应该new一个对象出来的 当然对象的定义也应该做相应调整 赫赫
这里都没涉及到异步的操作,js是单线程的
定时器window.setTimeout(fn, 1000)意思是在1000ms后将fn函数丢到线程队列中,并"尽快"执行,尽快的意思是当线程队列前面所有函数都执行完了立刻执行,并不是异步执行的。
$this.name = parseInt($(obj).text()) 定义在temp()内部的时候却可以正常执行,这个是因为每次执行temp()的时候$this.name就重新设置了当前dom元素的值,所以是正确的。