<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<script src="js/jquery-1.12.3.js"></script>
<body>
</body>
<script>
//异步操作有回调函数、事件监听、发布/订阅、Promises对象
[详情见大神博客](http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html)
$(function () {
//全局设置ajax默认同步加载
$.ajaxSetup({
async:false
})
for(var i=0;i<3;i++){//for循环是单线程
//+function (i) {
var url='json/zzz'+i+'.json';
//$.get()和$.post()默认是异步加载
$.get(url,function (data) {
console.log(url)
})
//}(i)
}
//另外一种写法:
//但是加载资源的顺序是随机的,这里不太懂,后续要查证
for(var i=0;i<3;i++){//for循环是单线程
+function (i) {
var url='json/zzz'+i+'.json';
//$.get()和$.post()默认是异步加载
$.get(url,function (data) {
console.log(url)
})
}(i)
}
for(var j=0;j<3;j++){
setTimeout(function (s) {
console.log(s)
console.log(new Date().getTime())
}.bind(null,j),2000*j) //闭包作用
}
for(var jj=0;jj<3;jj++){
!function (j) {//立即执行函数(将jj传入闭包),会将setTimeout插到队列for循环的队列中立即执行
setTimeout(function () {
console.log(j)
console.log(new Date().getTime())
},2000*j)
}(jj)
}
//一是使用自执行函数提供闭包条件,二是传入jj值并保存在闭包中。
})
</script>
</html>
异步任务队列执行的时间,需要等待到函数调用栈清空之后才开始执行。即所有可执行代码执行完毕之后,才会开始执行由setTimeout定义的操作。而这些操作进入队列的顺序,则由设定的延迟时间来决定。