js中的同步异步操作

<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定义的操作。而这些操作进入队列的顺序,则由设定的延迟时间来决定。

转载于:https://my.oschina.net/u/3407699/blog/1559219

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值