2010-08-03 39 views
2

如果,例如,我有一些jQuery的做这样简单的东西:JavaScript执行顺序 - 运行this(),然后在this()完成时执行那个()?

$("div").fadeIn('fast'); 
$("div").html('Foo'); 

这将消失在div,并设置它的HTML到“富”,而它仍然衰落,而:

$("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(); 

它会开始做别的事情,而它仍然在做什么,还是会耐心等待做一些事来完成它别的东西之前?

+0

你试过了吗? – Sarfraz 2010-08-03 10:14:50

+0

@Sarfraz我不知道如何确认行为。即使有某种控制台日志,它仍然会按顺序登录。 – bcmcfc 2010-08-03 11:32:01

回答

3

JavaScript一般不会不是就像这样工作,你会看到jQuery动画和回调的结果。当您通过setInterval()运行某些内容时,它会在当前线程之外发生,稍后踢出(.fadeIn()是动画,they're on interval timers)。

所以第二个函数传递给.fadeIn()(或任何.animate()功能)是回调,当它完成它执行此操作。尽管在时间间隔和定时器之外,您的脚本将按顺序发生。

即使有时间间隔,并以发生定时器,只是没有当事情应该发生它出现在代码中,按时间顺序的次序他们这样做(只要他们按时完成,主线程不等待,即使如此,他们'的顺序,如果不是准时)。

1

Javascript正在浏览器中的一个线程中运行,所以事情将按顺序依次运行。超时和回调将等待,如果有任何事情发生,并将运行结束。

唯一的例外是Web Worker Threads,但它们不应该影响UI。

1

JavaScript是单线程的,它一次只能做一件事,通常按顺序。 调用时,回调模式仅在运行脚本后面插入一个函数。 当您开始使用观察者模式(eventListeners)时,它变得更加复杂。