JavaScript-js 回调 异步 求解

发布于 2016-11-03 17:29:04 字数 1148 浏览 1132 评论 2

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2017-07-11 01:02:43

你这样写没必要用$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一个对象出来的 当然对象的定义也应该做相应调整 赫赫

夜无邪 2016-12-12 22:50:10

这里都没涉及到异步的操作,js是单线程的
定时器window.setTimeout(fn, 1000)意思是在1000ms后将fn函数丢到线程队列中,并"尽快"执行,尽快的意思是当线程队列前面所有函数都执行完了立刻执行,并不是异步执行的。

$this.name = parseInt($(obj).text()) 定义在temp()内部的时候却可以正常执行,这个是因为每次执行temp()的时候$this.name就重新设置了当前dom元素的值,所以是正确的。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文