首页 > 其他分享 >一些八股:1.fetch 的理解。2.let、const、var

一些八股:1.fetch 的理解。2.let、const、var

时间:2024-08-05 19:38:28浏览次数:7  
标签:const 作用域 example let var 声明 Fetch

一、 说说你对 Fetch 的理解,它有哪些优点和不足?

Fetch API 是现代 JavaScript 中用于进行网络请求的接口,旨在替代传统的 XMLHttpRequest。它提供了一种更简单、更灵活的方法来获取资源和与服务器进行交互。下面,我将详细介绍 Fetch 的优点和不足。

Fetch 的优点:

语法简洁直观:Fetch 使用基于 Promise 的机制,这使得代码更加简洁易读。相比于 XMLHttpRequest,它避免了回调地狱(callback hell),大大提高了代码的可维护性。

fetch('https://api.example.com/data')
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error('Error:', error));

 

更好的可读性和可维护性:由于 Fetch 是基于 Promise 的,结合 async/await 语法可以使异步代码看起来像同步代码一样,进一步提高代码的可读性。

async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}

 

更强的灵活性:Fetch 提供了一组丰富的选项(options),可以轻松设置请求方法、头信息、请求体等。

fetch('https://api.example.com/data', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ key: 'value' })
});

 

Stream 处理:Fetch API 支持对响应体的流式处理,可以逐步读取响应数据,适用于处理大文件或实时数据。

fetch('https://api.example.com/data')
  .then(response => {
    const reader = response.body.getReader();
    // 逐步处理数据
  });

 

 

Fetch 的不足:
  1. 不支持进度监控:与 XMLHttpRequest 不同,Fetch 目前不支持原生的进度事件(如 onprogress),这使得在下载或上传大文件时无法获得进度更新。

  2. 对老旧浏览器的兼容性:Fetch 是现代 API,某些老旧浏览器(如 IE)不支持,需要使用 polyfill 来保证兼容性。

  3. 默认不发送 Cookies:Fetch 默认不会发送 cookies,需要手动设置 credentials 选项。

fetch('https://api.example.com/data', {
  credentials: 'include'
});

 

错误处理机制:Fetch 对于网络错误和 HTTP 错误(如 404 或 500)的处理需要特别注意,因为只有网络错误会触发 catch,而 HTTP 错误仍会被视为成功的请求。

fetch('https://api.example.com/data')
  .then(response => {
    if (!response.ok) {
      throw new Error('Network response was not ok');
    }
    return response.json();
  })
  .catch(error => console.error('Error:', error));

 

 

二、理解 JavaScript 中的 let、const 和 var

在 JavaScript 中,声明变量的方式主要有三种:varletconst。每种方式都有其独特的特性和适用场景。下面,我将详细介绍它们之间的区别。

1. var

var 是最早在 JavaScript 中引入的变量声明方式。它有以下几个特点:

  • 函数作用域var 声明的变量在函数内是局部变量,在函数外是全局变量。
  • 变量提升var 声明的变量会被提升到函数或全局作用域的顶部,但变量初始化不会提升。
  • 可重复声明:同一作用域内,var 声明的变量可以重复声明。
function example() {
  console.log(a); // undefined
  var a = 10;
  console.log(a); // 10
}
example();

 

2. let

let 是在 ES6 中引入的,用于声明块级作用域的变量。它有以下几个特点:

  • 块级作用域let 声明的变量在块级作用域内有效,不会污染全局作用域。
  • 无变量提升let 声明的变量不会被提升,必须先声明后使用。
  • 不可重复声明:同一作用域内,let 声明的变量不能重复声明。
function example() {
  if (true) {
    let a = 10;
    console.log(a); // 10
  }
  console.log(a); // ReferenceError: a is not defined
}
example();

 

3. const

const 也是在 ES6 中引入的,用于声明常量。它有以下几个特点:

  • 块级作用域const 声明的变量在块级作用域内有效。
  • 不可变性const 声明的变量必须在声明时初始化,且初始化后不可重新赋值(但对于对象和数组,其内部值是可变的)。
  • 不可重复声明:同一作用域内,const 声明的变量不能重复声明。
function example() {
  const a = 10;
  a = 20; // TypeError: Assignment to constant variable.
  
  const obj = { key: 'value' };
  obj.key = 'new value'; // 这是允许的
  console.log(obj.key); // 'new value'
}
example();

 

标签:const,作用域,example,let,var,声明,Fetch
From: https://www.cnblogs.com/zx618/p/18343926

相关文章

  • 出现 No mapping for DELETE/GET等
    出现NomappingforDELETE/GET等错误一:请求url不对修改前如下图可知后端请求url为http://localhost:8080/user/addressBook运行后控制台出现发现后端请求url比前端请求url少了/改正:在@DeleteMapping后面加上/ @DeleteMapping("/")@ApiOperation("根据id......
  • 【YashanDB数据库】自关联外键插入数据时报错:YAS-02033 foreign key constraint viola
    问题现象使用如下的sql语句创建自关联外键表:droptableself_f_key;createtableself_f_key(t1numberprimarykeynotnull,t2number);createindexi_s_1onself_f_key(t2);altertableself_f_keyaddconstraintc_0001foreignkey(t2)referencesself_f_key(t1);......
  • const objectUtil = require('../../utils/object'); const toolUtil = require('../.
    //模态框functionshowModal(title,content,confirm,cancel){wx.showModal({title:title,content:content,showCancel:true,success(res){if(res.confirm){confirm(confirm)}elseif(res.canc......
  • leaflet实现绘制省市区域边界并填充颜色
    leaflet实现绘制省市区域边界并填充颜色asyncinitMap(){this.map=L.map("map",{center:[30.998257,103.653534],zoom:11,attributionControl:false,//隐藏logozoomControl:false,crs:L.CRS.Baidu,});......
  • JavaWeb中Servlet过滤器的应用即防跳墙的添加
    原理:在Servlet和mybatis的基础环境上使用过滤器(对上篇学生管理系统的进一步完善)也是使用session进行判断和控制页面的跳转一、过滤器的基本概念: Servlet过滤器:  从字面上的字意理解为经过一层次的过滤处理才达到使用的要求,而其实Servlet过滤器就是服务器与客户端请求......
  • JavaWeb之servlet关于Ajax实现前后端分离
    一、什么是Ajax:AJAX=AsynchronousJavaScriptandXML(异步的JavaScript和XML)。AJAX不是新的编程语言,而是一种使用现有标准的新方法。AJAX最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容。AJAX不需要任何浏览器插件,但需要用户允......
  • kubelet节点资源预留
    目录一、NodeAllocatable1、node资源预留1.1为什么要做资源预留?1.2nodeallocatable1.2.1查看node节点资源1.2.2确认node01节点资源2、配置资源预留2.1kube预留值2.2systemReserved预留2.3evictionHard预留2.4整体配置2.5重启服务2.6Allocatable资源说明一、NodeA......
  • 设计模式 - Singleton pattern 单例模式
    文章目录定义单例模式的实现构成构成UML图单例模式的六种实现懒汉式-线程不安全懒汉式-线程安全饿汉式-线程安全双重校验锁-线程安全静态内部类实现枚举实现总结其他设计模式文章:最后定义单例模式是一种创建型设计模式,它用来保证一个类只有一个实例,并且提供一个......
  • 57_2设置Servlet模板、Servlet线程安全问题、跳转
    设置Servlet模板再创建类就有了模板代码#if(${PACKAGE_NAME}&&${PACKAGE_NAME}!="")package${PACKAGE_NAME};#end#parse("FileHeader.java")importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servl......
  • FastAPI Starlette Middleware 会话 - 重定向后无法访问会话数据
    我正在使用FastAPI作为后端编写一个简单的Web应用程序,并且我希望通过AzureB2C实现身份验证。这一切的逻辑现在并不重要,我只是想能够测试一下我是否可以使用不同的方法成功登录。但是,在尝试了很长一段时间之后,我不明白,为什么我可以重定向后不会从会话中检索用户的数据......