例如,如果我有一些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();
在它还在做什么的时候会开始做别的事吗,还是会耐心地等待做一些事情才能完成其他事情?
答案 0 :(得分:3)
JavaScript一般不就像这样工作,你会看到jQuery动画和回调的结果。当您通过setInterval()
运行某些内容时,它会在当前线程之外发生,稍后开始(.fadeIn()
是一个动画,they're on interval timers)。
因此,传递给.fadeIn()
(或任何.animate()
函数)的第二个函数是回调,它会在完成时执行。但是,在间隔和计时器之外,您的脚本将按顺序进行。
即使有间隔和定时器,它也按顺序发生,而不是它在代码中出现的顺序,按时间顺序排列应该发生的事情(如果它们及时完成并且主线程没有等待即便如此,如果不是按时,他们依次)。
答案 1 :(得分:1)
Javascript在浏览器中的一个线程中运行,因此事情将依次运行,一个接一个。如果发生任何事情,超时和回调将等待,并将继续完成。
唯一的例外是Web Worker Threads,但它们不应影响用户界面。
答案 2 :(得分:1)
JavaScript是单线程的,它通常只能按顺序执行一件事。 回调模式在调用时仅在运行脚本后面添加一个函数。 当您开始使用观察者模式(eventListeners)时,它会变得更加复杂。