先说一下笔试题吧,一共四道题,考察浅拷贝和同步异步问题 **
1.以下打印结果是什么**
var a = 1
var b = a
a=3
b.name = 'hellow'
console.log(a)
console.log(b.name)
结果:3 undefined
2.以下打印结果是什么?
let obj = {
name:"hello world",
age:55
}
let obj2 = obj
obj2['c'] = 22
console.log(obj)
console.log(obj2)
结果:
这道题楼主做错了, 楼主答案是写第一个obj是{ name:"hello world", age:55 }; obj2是{ name:"hello world", age:55, c:22 }; 现在了解到浅拷贝,无论是增、删、改都会影响原来的值,因为它的引用对象是同一个。
3.以下打印结果是?
async function async1(){
console.log(2)
await async2()
console.log(3)
}
async function async2(){
console.log(4)
}
console.log(1)
async1()
console.log(5)
结果:
这道题楼主做的时候写成了:12435,因为await会阻塞后面代码执行,和好友讨论,说是await把后面的代码放到微任务里了,然后楼主不确定是否放微任务,执行了一下代码,结果确实是放在微任务里了。
4.以下输出什么结果?
(function test(){
console.log(1)
setTimeout(function() {
console.log(2)
}, 1000);
setTimeout(function() {
console.log(3)
},0);
setTimeout(function() {
console.log(4)
}, 0);
})()
结果:1342,
这道题楼主发现自己对宏任务里的计时器不熟悉,同等为宏任务的情况下,那个倒计时快就执行哪个。
通过这次面试题,加深了对事件循环机制的理解。