例如,如果我让一些jQuery做一些简单的事情,比如:
$("div").fadeIn('fast');
$("div").html('Foo');这将在div中淡入,并将其html设置为"Foo“,同时它仍在淡入,而:
$("div").fadeIn('fast',function(){
$("div").html('Foo');
});只有在div完成淡入之后,才会将html设置为"Foo“。
这类事情通常是JavaScript的工作方式吗?所以如果我有:
//do something
var i = 42;
var foo = i/1;
//do something else
var bar = fooBar();它会在还在做某件事的同时开始做其他的事情,还是会耐心地等待做完某件事后再做其他的事?
发布于 2010-08-03 18:15:25
JavaScript通常不是这样工作的,你可以看到jQuery动画和回调的结果。当你通过setInterval()运行一些东西时,它发生在当前线程之外,稍后才开始(.fadeIn()是一个动画,they're on interval timers)。
因此,您传递给.fadeIn() (或任何.animate()函数)的第二个函数是回调,它在完成后执行此操作。在时间间隔和计时器之外,您的脚本将按顺序出现。
即使有时间间隔和计时器,它也是按顺序发生的,而不是它在代码中出现的顺序,按时间顺序应该发生的事情就会发生(只要它们及时完成并且主线程没有等待,即使它们是有序的,如果不是准时的话)。
发布于 2010-08-03 18:14:32
Javascript在浏览器中的一个线程中运行,因此将按顺序运行,一个接一个。如果发生任何事情,超时和回调将等待,并将运行以完成。
唯一的例外是Web Worker Threads,但它们不应该影响UI。
发布于 2010-08-03 18:16:35
JavaScript是单线程的,它一次只能做一件事,通常是按顺序执行的。回调模式在被调用时只是将一个函数放在正在运行的脚本后面。当您开始使用观察者模式(eventListeners)时,它会变得更加复杂。
https://stackoverflow.com/questions/3395514
复制相似问题