同步异步类面试题

写出下面代码执行之后的结果,并分析原理

async function async1(){
    console.log('async1 start')
    await async2();
    console.log('async1 end');
}
async function async2(){
    console.log('async2');
}
console.log('script start');
setTimeout(function(){
    console.log('setTimeout');
},0);
async1();
new Promise(function(resolve){
    console.log('promise1');
    resolve();
}).then(function(){
    console.log('promise2');
});
console.log('script end');

执行结果:

script start
async1 start
async2
promise1
script end
async1 end
promise2
setTimeout

分析:


image.png
for (var i=0;i<5;i++){
    ~function(j){
        setTimeout(function(){
            console.log(j)
        },100)
    }(i)
}

执行结果:

0
1
2
3
4

分析:
~自执行函数
利用闭包的特性,将参数锁定

推荐阅读更多精彩内容