前端基础知识篇-面试题

1. 请说明 Ajax Fetch Axios 三者的区别

三者都用于网络请求,但是不同维度

  • Ajax(Asynchronous Javascript and XML):一种技术统称
  • Fetch:一个原生API (浏览器原生 API,用于网络请求; 和 XMLHttpRequest 一个级别; Fetch 语法更加简洁、易用,支持 Promise)
  • Axios:一个 第三方库 最常用的网络请求 lib(随着 Vue 火爆起来);内部可用 XMLHttpRequest 和 Fetch 来实现

用 XMLHttpRequest 实现 Ajax

  /**
   * @description: 用 XMLHttpRequest 实现 Ajax
   * @param {*} url 接口地址
   * @param {*} successFn 回调函数
   * @return {*}
   */
  function ajax(url, successFn) {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', url, false);
    xhr.onreadystatechange = function () {
      // 这里的函数异步执行
      if (xhr.readyState == 4) {
        if (xhr.status == 200) {
          successFn(xhr.responseText);
        }
      }
    };
    xhr.send(null);
  }

2. 节流和防抖(两者有什么区别,分别用于什么场景?)

## 防抖

  • 防抖,防止抖动 “你先抖动着,啥时候停了,再执行下一步
  • 例如,一个搜索输入框,等输入停止之后,再触发搜索
  /**
   * @description: 防抖函数
   * @param {*} fn 回调函数
   * @param {*} delay 延迟时间ms
   * @return {*}
   */
  function debounce(fn, delay = 200) {
    let timer = 0;
    return function () {
      if (timer) clearTimeout(timer);
      timer = setTimeout(() => {
        fn.apply(this, arguments); // 透传 this 和参数
        timer = 0;
      }, delay);
    };
  }

在这里插入图片描述

  • 节流,节省交互沟通。流,不一定指流量。
  • 别急,一个一个来,按时间节奏来,插队者无效
  • 例如,drag 或 scroll 期间触发某个回调,要设置一个时间间隔
 /**
   * @description: 节流函数
   * @param {*} fn 回调函数
   * @param {*} delay 延迟时间ms
   * @return {*}
   */
  function throttle(fn, delay = 200) {
    let timer = 0;
    return function () {
      if (timer) return;
      timer = setTimeout(() => {
        fn.apply(this, arguments); // 透传 this 和参数
        timer = 0;
      }, delay);
    };
  }

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 箭头函数

箭头函数有什么缺点?

  • 没有 arguments
  • 无法通过 apply call bind 改变 this
  • 某些箭头函数代码难以阅读

什么时候不能使用箭头函数?

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4. 请描述TCP三次握手 四次挥手

建立 TCP 连接

  • 先建立连接(确保双方都有收发消息的能力)
  • 再传输内容(如发送给一个 get 请求)
  • 网络连接是 TCP 协议,传输内容是 HTTP 协议

三次握手 -建立连接

  • Client 发包,Server 接收。Server:有 Client 要找我
  • Server 发包,Client 接收。Client:Server 已经收到信息了
  • Client 发包,Server 接收。Server:Client 要准备发送了

四次挥手-关闭连接

  • Client 发包,Server 接收。Server:Client 已请求结束
  • Server 发包,Client 接收。Client:Server已收到,我等待它关闭
  • Server 发包,Client 接收。Client:Server 此时可以关闭连接了
  • Client 发包,Server 接收。Server:可以关闭了(然后关闭连接)
    在这里插入图片描述

5. offsetHeight scrollHeight clientHeight 有什么区别

计算规则

  • offsetHeight offsetWidth : border + padding + content
  • clientHeight clientwidth : padding + content
  • scrollHeight scrollWidth : padding + 实际内容尺寸

6. HTMLCollection 和 NodeList 区别

Node 和 Element

  1. DOM 是一棵树,所有节点都是 Node
  2. Node 是 Element 的基类
  3. Element 是其他 HTML 元素的基类,如 HTMLDivElement

HTMLCollection 是 Element 的集合
NodeList 是 Node 集合

在这里插入图片描述
在这里插入图片描述

7. JS 严格模式有什么特点

JS 严格模式细节要求很多,只掌握重点即可

  • 全局变量必须先声明
  • 禁止 this 指向 window
  • 禁止使用 with
  • 函数参数不能重名
  • 创建 eval 作用域

在这里插入图片描述

8. HTTP 跨域请求时为何发送 options 请求

跨域请求

  • 浏览器同源策略
  • 同源策略一般限制 Ajax 网络请求,不能跨域请求 server
  • 不会限制 link img script iframe等标签加载第三方资源
    JSONP原理
    服务端解决跨域问题
    在这里插入图片描述
    答案:
  • options 请求,是跨域请求之前的预检查
  • 浏览器自行发起的,无需我们干预
  • 不会影响实际的功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值