这时候你有两种选择:一种是不挂电话一直等待,直到工作人员查到为止(可能几分钟也可能几个小时,取决于他们的办事效率),这就是同步的。
另一种是工作人员问了你的联系方式就挂断了电话,等他们查到之后再通知你,这就是异步的,这时候你就可以干点其他事情,比如把机票也定了之类的
A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自顾自的处理它自己的事儿,不用干等着这个耗时操作返回。可以达到避免调用线程阻塞的目的。类型多线程,其实,异步是目的,而多线程是实现这个目的的方法
按照顺序向下执行,如果上面的操作卡死,可能导致整个操作卡死
<script>
console.log(1);
setTimeout(function(){
console.log(2);
},500);
console.log(3);
// 运行结果
// 1
// 3
// 2
</script>
<script>
var date = new Date();
console.log('first time: ' + date.getTime());
setTimeout(function(){
var date1 = new Date();
console.log('second time: ' + date1.getTime() );
console.log( date1.getTime() - date.getTime() );
},1000);
for(var i=0; i < 10000 ; i++){
console.log(1);
}
// 运行结果
// first time: 1524540272462
// (10000)1
// second time: 1524540274346
// 1884
</script>
// first time: 1524540272462
//(x)1
// second time: 1524540273462
// 1000
//(10000-x)1
x为一秒内打印的1的数量。
function a()
{
setTimeout(function(){console.log(1);},0);
console.log(2);
}
a();
//4. What will be written to the console for the following code snippet?
(function () {
console.log(1);
setTimeout(function () {
console.log(2);
}, 100);
console.log(3);
setTimeout(function () {
console.log(4);
}, 0);
console.log(5);
})()
结果应该为1,3,5,4,2
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
}, 1000);
}
console.log(i);
结果应该为5,5,5,5,5
1)for循环和循环体外部的console是同步的,所以先执行for循环,再执行外部的console.log。(同步优先)
2)for循环里面有一个setTimeout回调,他是垫底的存在,只能最后执行。(回调垫底)
原文:https://www.cnblogs.com/faramita/p/11306114.html