我们知道$.ajax()
是一个异步方法,beacuse next语句在ajax()
方法完全执行之前开始执行,'ajax()'继续并行执行他的东西,而hide()
是一个同步方法,因为它会立即隐藏元素,而下一个语句将在hide()
真正完成他的整个任务时执行,但我对hide("slow")
的情况感到困惑。它似乎是异步但我读过,它在浏览器中设置计时器并且一切都自动发生(现在hide("slow")
并没有并行执行)所以在某种程度上,它还在下一个语句开始执行之前完成了它的整个任务,所以hide("slow")
似乎也是一种同步方法,
我对这种同步异步概念非常困惑
有人可以帮我理解这个概念吗?
答案 0 :(得分:5)
.hide(“slow”)是同步或异步方法
该方法的调用是同步的,但它启动了一个异步过程。所以我们通常会松散地称之为“异步方法”(在这种情况下,你给它一个持续时间参数)。
当你调用t
时,你同步告诉jQuery 开始随着时间的推移慢慢隐藏元素的过程。实际执行此操作的过程在完成对hide("slow")
的初始调用后异步进行。 (对于hide
也是如此:方法本身是同步的,但它启动的过程 - 执行XMLHttpRequest - 以异步方式继续。)
通常如果方法的工作在调用期间完成,我们将其称为同步方法,但如果只有启动以后完成的工作,我们称之为异步方法。从技术上讲,方法本身不是异步的,只是它启动的整个过程,但是......
当然, hide
本身是同步和异步方法,取决于你传递的参数:如果你没有持续时间(ajax
)调用它,它是同步的;如果你用持续时间(.hide()
,.hide("slow")
)来调用它,它就是异步的。
答案 1 :(得分:1)
另外,对于你的另一个问题,
我对这种同步异步概念Can非常困惑 有人帮我理解这个概念吗?
当您调试一行代码并且该行未在执行完成之前传递到下一行时,由于同一线程正在执行代码的完整执行,因此它的同步操作。
另一方面,如果调试在实际操作完成之前传递到下一行,那么它的异步操作就像上面的问题一样,隐藏&当主线程开始执行下一行时,动画在后台用不同的线程执行。
希望它澄清你的上述问题。