.hide(“慢”)是同步还是异步方法?

时间:2016-10-15 12:51:48

标签: javascript jquery asynchronous synchronous

我们知道$.ajax()是一个异步方法,beacuse next语句在ajax()方法完全执行之前开始执行,'ajax()'继续并行执行他的东西,而hide()是一个同步方法,因为它会立即隐藏元素,而下一个语句将在hide()真正完成他的整个任务时执行,但我对hide("slow")的情况感到困惑。它似乎是异步但我读过,它在浏览器中设置计时器并且一切都自动发生(现在hide("slow")并没有并行执行)所以在某种程度上,它还在下一个语句开始执行之前完成了它的整个任务,所以hide("slow")似乎也是一种同步方法,

我对这种同步异步概念非常困惑

有人可以帮我理解这个概念吗?

2 个答案:

答案 0 :(得分:5)

  

.hide(“slow”)是同步或异步方法

该方法的调用是同步的,但它启动了一个异步过程。所以我们通常会松散地称之为“异步方法”(在这种情况下,你给它一个持续时间参数)。

当你调用t时,你同步告诉jQuery 开始随着时间的推移慢慢隐藏元素的过程。实际执行此操作的过程在完成对hide("slow")的初始调用后异步进行。 (对于hide也是如此:方法本身是同步的,但它启动的过程 - 执行XMLHttpRequest - 以异步方式继续。)

通常如果方法的工作在调用期间完成,我们将其称为同步方法,但如果只有启动以后完成的工作,我们称之为异步方法。从技术上讲,方法本身不是异步的,只是它启动的整个过程,但是......

当然,

hide本身是同步和异步方法,取决于你传递的参数:如果你没有持续时间(ajax)调用它,它是同步的;如果你用持续时间(.hide().hide("slow"))来调用它,它就是异步的。

答案 1 :(得分:1)

另外,对于你的另一个问题,

  

我对这种同步异步概念Can非常困惑   有人帮我理解这个概念吗?

当您调试一行代码并且该行未在执行完成之前传递到下一行时,由于同一线程正在执行代码的完整执行,因此它的同步操作。

另一方面,如果调试在实际操作完成之前传递到下一行,那么它的异步操作就像上面的问题一样,隐藏&当主线程开始执行下一行时,动画在后台用不同的线程执行。

希望它澄清你的上述问题。