1.1 同步和异步
程序从上到下执行:
console.log(1);
console.log(2);
console.log(3);
console.log(4);
console.log(5);
同步synchronous 美[ˈsɪŋkrənəs, ˈsɪn-]
假如程序中有for循环,非常耗费时间,但是系统会用“同步”的方式运行:
console.log(1);
console.log(2);
console.log(3);
for (var i = 0; i < 10000; i++) {
console.log("★");
}
console.log(4);
“同步”的意思:for循环很耗费时间,但是程序就是傻等,傻傻的等待10000个星星输出,然后输出4。
比如妈妈去接儿子的飞机,需要等很长时间,等待的时候就是傻等,不同时做别的事情。
异步Asynchronous
console.log(1);
console.log(2);
console.log(3);
setInterval(function(){
console.log("★");
},1000);
console.log(4);
“异步”的意思:遇见了一个特别耗费时间的事情,程序不会傻等,而是先执行后面的语句。
比如妈妈去接儿子的飞机,需要等很长时间,但是妈妈同时逛逛商店什么的,不是傻等。
JS中的异步,需要异步语句:setInterval、setTimeout、Ajax、Node.js……等等
如果有异步语句了,那么一定是异步的。如果没有异步语句,那就不是异步的。
1.2 回调函数
异步的事情做完了,我们想继续做什么事儿,那此时怎么办呢?
回调函数: 异步的语句做完之后要做的事情
var count = 0;
var timer = setInterval(function(){
console.log("★");
count++;
if(count == 300){
clearInterval(timer);
callback();
}
},20);
//回调函数
function callback(){
alert("全部星星输出完毕");
}
回调函数2
<head>
<meta charset="UTF-8">
<title>Document</title>
<style type="text/css">
div{
width: 80px;
height: 80px;
background-color: yellowgreen;
position: absolute;
left: 100px;
top: 100px;
}
</style>
</head>
<body>
<div></div>
<script type="text/javascript" src="运动框架实例.js"></script>
<script type="text/javascript">
var oDiv = document.getElementsByTagName("div")[0];
huidiao();
function mmmm(){
animate(oDiv,{"left":600},300,function(){
animate(this,{"top":300},300,function(){
animate(this,{"left":100},300,function(){
animate(this,{"top":100},300,function(){
huidiao();
/*animate(oDiv,{"left":600},300);
animate(this,{"top":300},300);
animate(this,{"left":100},300); 这种写法错误,
因为函数是异步的,四个同时执行。
animate(this,{"top":100},300);f*/
});
});
});
});
}
</script>
</body>
</html>