【前端面试】基础知识总结

简介: 【前端面试】基础知识总结

①Ajax和Fetch和Axios有什么区别


Ajax是一种技术统称。Fetch是一个具体的API,Axios是一个第三方库。

Fetch是XMLHttpRequest的一个升级,语言更简洁,支持promise

用XMLHttpRequest实现一个Ajax

微信图片_20221011134125.png②节流和防抖区别和分别用于什么场景


防抖: 防止抖动,先抖动,什么时候停止就执行下一步。场景:用于搜索框。

总结:等待

image-20220703102225410

节流: 节省交互沟通。(别急,一个一个来)场景:scoll 拖拽

总结:按照一定的频率触发事件

微信图片_20221011134303.png

③ px 、%、 em、 rem、 vw/vh 有什么区别


都是css的单位


**px:**基本单位,绝对单位;


%: 相对于父元素的宽度比例;


**em:**相对于当前元素的 font-size;


**rem:**相对于根节点的 font-size;(实现移动端适配)


vw: 屏幕宽度的 1%


vh: 屏幕高度的 1%


④ 箭头函数的缺点


  • 没有 arguments 参数
  • 无法改变this。无法通过 call apply bind 等改变 this


不适用场景:


  • 对象方法
  • 对象原型
  • 构造函数
  • 动态上下文
  • Vue 生命周期和方法


⑤ TCP 连接 三次握手 四次挥手


**连接:**客户端和服务端通过 HTTP 协议发送请求,并获取内容


HTTP 协议是一个应用层的协议,它只规定了 req 和 res 的数据格式,如状态码、header、body 等。

而建立网络连接需要更加底层的 TCP 协议。


**三次握手:**即建立一次 TCP 连接时,客户端和服务端总共需要发送 3 个包


  • 客户端发包,服务端收到。服务端确认:客户端的发送能力是正常的。
  • 服务端发包,客户端收到。客户端确认:服务端的接收能力是正常的。
  • 客户端发包,服务端收到。服务端确认:客户端即将给我发送数据,我要准备接收


**四次挥手:**挥手告别,就是关闭连接


  • 客户端发包,服务端接收。服务端确认:客户端已经请求结束
  • 服务端发包,客户端接收。客户端确认:服务端已经收到,我等待它关闭
  • 服务端发包:客户端接受。客户端确认:服务端已经发送完成,可以关闭
  • 客户端发包,服务端接收。服务端确认:可以关闭了

微信图片_20221011134622.png

⑥ for-in 和 for-of 的区别


  • for…in 遍历 key , for…of 遍历 value
  • for…in 可以遍历对象,for…of 不可以
  • for…of 可以遍历 Map/Set ,for…in 不可以
  • for…of 可遍历 generator ,for…in 不可以


总结:

  • for…in 遍历一个对象的可枚举属性,如对象、数组、字符串。针对属性,所以获得key
  • for…of 遍历一个可迭代对象,如数组、字符串、Map/Set 。针对一个迭代对象,所以获得 value

**for await…of 的作用:**用于遍历异步请求的可迭代对象。

// 定义一个promise 的函数
function createTimeoutPromise(val) {
    return new Promise(resolve => {
        setTimeout(() => {
            resolve(val)
        }, 1000)
    })
}
// 如果有一个对象,里面有 N 个 promise 对象,可以这样处理
(async function () {
    const list = [
        createTimeoutPromise(10),
        createTimeoutPromise(20)
    ]
    // 第一,使用 Promise.all 执行
    Promise.all(list).then(res => console.log(res))
    // 第二,使用 for await ... of 遍历执行
    for await (let p of list) {
        console.log(p)
    }
    // 注意,如果用 for...of 只能遍历出各个 promise 对象,而不能触发 await 执行
})()

⑦ offsetHeight scrollHeight clientHeight 区别

微信图片_20221011134952.png

  • offsetHeight - border + padding + content
  • clientHeight - padding + content
  • scrollHeight - padding + 实际内容的高度

⑧ HTMLCollection 和 NodeList 的区别、Node 和 Element 的区别


  • DOM 结构是一棵树,树的所有节点都是 Node ,包括:document,元素,文本,注释,fragment 等
  • Element 继承于 Node 。它是所有 html 元素的基类,如 HTMLParagraphElement HTMLDivElement
  • HTMLCollection 是 Element 集合,它由获取 Element 的 API 返回


   elem.children

   document.getElementsByTagName('p')

  • NodeList 是 Node 集合,它由获取 Node 的 API 返回


   document.querySelectorAll('p')

  elem.childNodes


⑨ Vue computed 和 watch 区别


  • computed 就已有数据产出新数据,有缓存。如对于一个列表进行 filter 处理
  • watch 监听已有数据(如 v-model 时,数据可能被动改变,需要监听才能拿到)


⑩ Vue 组件通讯


props / $emit


适用于父子组件。


  • 父组件向子组件传递 props 和事件
  • 子组件接收 props ,使用 this.$emit 调用事件


自定义事件


适用于兄弟组件,或者“距离”较远的组件。


常用 API


  • 绑定事件 event.on(key, fn) 或 event.once(key, fn)
  • 触发事件 event.emit(key, data)
  • 解绑事件 event.off(key, fn)


Vue 版本的区别


【注意】组件销毁时记得 off 事件,否则可能会造成内存泄漏


$attrs


$attrs 存储是父组件中传递过来的,且未在 props 和 emits 中定义的属性和事件。

相当于 props 和 emits 的一个补充。

继续向下级传递,可以使用 v-bind="$attrs"。这会在下级组件中渲染 DOM 属性,可以用 inheritAttrs: false 避免。


【注意】Vue3 中移除了 $listeners ,合并到了 $attrs 中。


$parent


通过 this.$parent 可以获取父组件,并可以继续获取属性、调用方法等。

【注意】Vue3 中移除了 $children ,建议使用 $refs


$refs


通过 this.$refs.xxx 可以获取某个子组件,前提是模板中要设置 ref="xxx"。

【注意】要在 mounted 中获取 this.$refs ,不能在 created 中获取。


provide / inject

父子组件通讯方式非常多。如果是多层级的上下级组件通讯,可以使用 provide 和 inject


在上级组件定一个 provide ,下级组件即可通过 inject 接收。


  • 传递静态数据直接使用 provide: { x: 10 } 形式
  • 传递组件数据需要使用 provide() { return { x: this.xx } } 形式,但做不到响应式
  • 响应式需要借助 computed 来支持


Vuex


Vuex 全局数据管理


总结


  • 父子组件通讯

    props emits this.$emit

    $attrs (也可以通过 v-bind="$attrs" 向下级传递)

    $parent $refs


  • 多级组件上下级

     provide inject

  • 跨级、全局

    自定义事件

    Vuex

相关文章
|
2月前
|
缓存 前端开发 中间件
[go 面试] 前端请求到后端API的中间件流程解析
[go 面试] 前端请求到后端API的中间件流程解析
|
28天前
|
Web App开发 前端开发 Linux
「offer来了」浅谈前端面试中开发环境常考知识点
该文章归纳了前端开发环境中常见的面试知识点,特别是围绕Git的使用进行了详细介绍,包括Git的基本概念、常用命令以及在团队协作中的最佳实践,同时还涉及了Chrome调试工具和Linux命令行的基础操作。
「offer来了」浅谈前端面试中开发环境常考知识点
|
2月前
|
存储 XML 移动开发
前端大厂面试真题
前端大厂面试真题
|
5天前
|
Web App开发 JavaScript 前端开发
前端Node.js面试题
前端Node.js面试题
|
2月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
【8月更文挑战第18天】
44 2
|
2月前
|
存储 JavaScript 前端开发
2022年前端js面试题
2022年前端js面试题
35 0
|
2月前
|
存储 前端开发 JavaScript
44 个 React 前端面试问题
44 个 React 前端面试问题
|
2月前
|
存储 JavaScript 前端开发
|
2月前
|
Web App开发 存储 缓存
|
2月前
|
前端开发 容器
前端面试热门问题--浮动和清除浮动(CSS)
前端面试热门问题--浮动和清除浮动(CSS)