JS异步相关的面试题

104 阅读1分钟

1、异步和同步的区别

  • 基于JS是单线程语言
  • 异步不会阻碍代码执行
  • 同步会阻碍代码执行

2、手写Promise加载一张图片

function loadImg(src) {
    const p = new Promise(
        (resolve, reject) => {
            const img = document.createElement('img')
            img.onload = () => {
                resolve(img)
            }
            img.onerror = () => {
                const err = new Error(`图片加载失败 ${src}`)
                reject(err)
            }
            img.src = src
        }
    )
    return p
}

使用场景:

const url1 = 'https://img.mukewang.com/5a9fc8070001a82402060220-140-140.jpg'
const url2 = 'https://img3.mukewang.com/5a9fc8070001a82402060220-100-100.jpg'

loadImg(url1).then(img1 => {
    console.log(img1.width)
    return img1 // 普通对象
}).then(img1 => {
    console.log(img1.height)
    return loadImg(url2) // promise 实例
}).then(img2 => {
    console.log(img2.width)
    return img2
}).then(img2 => {
    console.log(img2.height)
}).catch(ex => console.error(ex))

3、异步应用场景

  • 网络请求,如ajax图片加载
  • 定时任务,如setTimeout

4、setTimeOut笔试题

image.png

打印结果: 1 3 5 4 2