js提前声明了全局变量,然后在局部作用域里面赋值,再到全局作用域取值就获取不到变量了?

可以看出来,setInterval() 中的代码是在一定时间之后才执行的(如果给 new_time 赋了初始值就更明显。这是因为 setInterval() 中的是异步代码,它和主流程中的代码不是走在同一个阻塞线上。

接下来改造一个,我们用 async/await 来等待异步过程结束
async function testAsync() {
    var new_time;
    console.log("[1]", new_time);
    let counter = 0;
    await new Promise(resovle => {
        const timer = setInterval(function() {
            new_time = new Date();
            console.log("[2]", new_time);
            if (++counter > 5) {
                clearInterval(timer);
                resovle();
            }
        }, 1000);
    });
    console.log("[3]", new_time);
}

testAsync()

输出

[1] undefined
[2] 2019-07-11T03:54:52.675Z
[2] 2019-07-11T03:54:53.675Z
[2] 2019-07-11T03:54:54.675Z
[2] 2019-07-11T03:54:55.675Z
[2] 2019-07-11T03:54:56.675Z
[2] 2019-07-11T03:54:57.675Z
[3] 2019-07-11T03:54:57.675Z

可以看到 [3] 是在异步结束之后执行的,因为异步过程用 Promise 封装之后,还使用 await 来等待它结束。

关于异步过程,我一时半会儿也不好解释清楚,给你推荐几个参考:
异步编程需要“意识”
理解 JavaScript 的 async/await
从地狱到天堂,Node 回调向 async/await 转变

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值