2023年5月15日——js前端面试题

96 阅读2分钟

一、js延迟加载的方式(async defer),二者区别?

1.外部链接async、defer都可以实现延迟加载js

2.二者区别?

  • defer:
    • 顺序:html全部解析之后才会执行js脚本。
    • 多个defer属性的script标签:顺次执行js脚本。
  • async:
    • js脚本下载完后就开始执行js代码。
    • 多个async属性的script标签:顺序不一定,谁先加载完谁执行。==》如果存在依赖关系,如等a.js加载完再加载b.js则不可使用async。

补充:

  • 绿色:解析HTML,构建DOM树
  • 紫色:脚本下载
  • 红色:执行js代码
  • 灰色:不执行

二.”==“和‘===’有什么区别?

  • 前者只是比较值的相等性,因为可以使用valueOf进行隐式转换,并不会显示到代码中
  • 后者除了比较值,还会进行类型的比较

三、js的宏任务和微任务

  • 单线程:同一时间只能做一件事,如何执行异步代码呢?
  • 事件循环机制(异步执行代码机制)

补充:js执行流程:先同步===》再事件循环(宏任务、微任务):先执行微任务,再执行宏任务(每次执行宏任务之前保证微任务队列是清空的)

  • 微任务:promise.then
  • 宏任务:定时器

四.JS的作用域考题

1.函数有块级作用域

2.作用域链:内部可以访问外部变量(逐一向上去找),但是外部不可以访问内部作用域

3.注意是var定义还是window.定义,如果函数内是window.b,则再函数外也能访问到。

4.关于变量提升:悬挂,

面试做题顺序:

1.先看本层作用域有没有此变量,注意变量提升

2.只要有var ,本层作用域就有变量,变量提升会一直悬挂在本层函数作用域

3.优先级:声明变量>声明普通函数>参数>变量提升