在深圳南山区面试了一家公司(100人左右规模),楼主面的是前端中级,笔试题+面试,部分答的不好,记录一下。

2 阅读1分钟

先说一下笔试题吧,一共四道题,考察浅拷贝和同步异步问题 **

1.以下打印结果是什么**

var a = 1
var b = a
a=3
b.name = 'hellow'
console.log(a)
console.log(b.name)

结果:3 undefined

image.png

2.以下打印结果是什么?

let obj = {
    name:"hello world",
    age:55
}

let obj2 = obj
obj2['c'] = 22

console.log(obj)
console.log(obj2)

结果:

image.png

这道题楼主做错了, 楼主答案是写第一个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)

结果:

image.png

这道题楼主做的时候写成了:12435,因为await会阻塞后面代码执行,和好友讨论,说是await把后面的代码放到微任务里了,然后楼主不确定是否放微任务,执行了一下代码,结果确实是放在微任务里了。

image.png

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,

image.png

这道题楼主发现自己对宏任务里的计时器不熟悉,同等为宏任务的情况下,那个倒计时快就执行哪个。

通过这次面试题,加深了对事件循环机制的理解。