一些八股:1.fetch 的理解。2.let、const、var
一、 说说你对 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 的不足:
不支持进度监控:与 XMLHttpRequest 不同,Fetch 目前不支持原生的进度事件(如
onprogress),这使得在下载或上传大文件时无法获得进度更新。对老旧浏览器的兼容性:Fetch 是现代 API,某些老旧浏览器(如 IE)不支持,需要使用 polyfill 来保证兼容性。
默认不发送 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 中,声明变量的方式主要有三种:var、let 和 const。每种方式都有其独特的特性和适用场景。下面,我将详细介绍它们之间的区别。
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();
一些八股:1.fetch 的理解。2.let、const、var的更多相关文章
- 对于fetch的理解
在一篇文章里见到一位作者是这么说的 XMLHttpRequest 是一个设计粗糙的 API,不符合关注分离(Separation of Concerns)的原则,配置和调用方式非常混乱,而且基于事件的 ...
- 理解复杂的const和typedef和指针的关系
// container.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> #inclu ...
- 从项目中理解let和const为什么如此重要
变量声明 变量声明方式 伴随js诞生的var // 语法 var varName = value var a = 1 // 这样子你就得到了一个变量 var缺陷场景分析 var specialUser ...
- javascript之闭包理解以及应用场景
半个月没写博文了,最近一直在弄小程序,感觉也没啥好写的. 之前读了js权威指南,也写了篇博文,但是实话实说当初看闭包确实还是一头雾水.现在时隔一个多月(当然这一段时间还是一直有在看闭包的相关知识)理解 ...
- javascript闭包理解
//闭包理解一 function superFun(){ var _super_a='a'; function subfuc(){ console.log(_super_a); } return su ...
- JS闭包深入理解(理解篇)
看书的时候很是不明白为啥变量老是五,经过认真思考的出一下理解: function box() { var arr = []; for (var i = 0; i < 5; i++) { ...
- 微信小程序——智能小秘“遥知之”源码分享(语义理解基于olami)
微信小程序智能生活小秘书开发详解 >>>>>>>>>>>>>>>>>>>>> ...
- scala可变var与不可变val的理解
我们定义变量的时候分为var可变变量和val不可变变量. 我们使用容器的时候也分为可变容器和不可变容器. List和Tuple本身就是不可变的,set和map分为可变和不可变的,默认为不可变. 我们看 ...
- js原型链的深度理解!
一. 普通对象与函数对象 JavaScript 中,万物皆对象!但对象也是有区别的.分为普通对象和函数对象,Object .Function 是 JS 自带的函数对象.下面举例说明 var o1 = ...
- 深入理解Proxy 及 使用Proxy实现vue数据双向绑定
阅读目录 1.什么是Proxy?它的作用是? 2.get(target, propKey, receiver) 3.set(target, propKey, value, receiver) 4.ha ...
随机推荐
- 2. Elasticsearch 使用插件和kibana操作
引言 在上一篇文章中1. Elasticsearch 入门安装与部署 已经教了大家如何在linux系统中安装和启动Elasticsearch,本文就带大家一起学习如何操作 Elasticsearch. ...
- MestReNova14.0中文版安装教程
MestReNova 14是一款专业级的核磁共振(NMR)与质谱(MS)数据分析软件,专注于化合物结构解析和验证.该软件以卓越的谱图处理能力和智能化算法为核心,提供自定义参数调整.自动峰识别.精准积分 ...
- Linux中的inode
inode是什么 一个文件由两部分组成:元信息和数据. 在Linux中,inode包含文件的元信息,具体来说有以下内容: Size 文件的字节数 Uid 文件拥有者的User ID Gid 文件的Gr ...
- yolov1-yolov5 网络结构&正负样本筛选&损失计算
学习yolo系列,最重要的,最核心的就是网络模型.正负样本匹配.损失函数等三个方面.本篇汇总了yolov1-yolov5等5个版本的相关知识点,主要看点是在yolo框架搭建.初学者可以通过相关篇章搭建 ...
- Ethercat设备数据 转 EthernetIP项目案例
1 案例说明 1. 设置网关采集EtherCAT设备数据 2. 把采集的数据转成EthernetIP协议转发给其他系统. 2 VFBOX网关工作原理 VFBOX网 ...
- PyTorch程序练习(二):循环神经网络的PyTorch实现
一.RNN实现 结构原理 代码实现 import torch import torch.nn as nn class RNN(nn.Module): def __init__(self, input_ ...
- 开发一个微信小程序流程及需要多少费用?
流程如下: 小程序是一种新的开放能力,开发者可以快速地开发一个小程序.小程序可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 开放注册范围:个人 企业 政府 媒体 其他组织 1.注册 在微信公 ...
- WebUi爬虫自动化测试 Selenium4.X+Java教程
为什么要学习Selenium 自动化测试 Selenium是最受欢迎的Web应用程序自动化测试工具之一. 通过学习Selenium,可以编写自动化测试脚本,用于自动执行各种任务,例如验证功能.测试用户 ...
- 第二部分:关键技术领域的开源实践【Linux服务器自动化运维】
Linux运维可能会遇到多种问题,这些问题可能源于技术挑战.资源配置.安全性.管理复杂性等多个方面.以下是一些常见的Linux运维问题: 技能要求: Linux系统通常需要较高的技术水平和经验来进行有 ...
- IntersectionObserver 实现图片懒加载
背景 最近使用express做导航类型网站,因为这个是后端jade渲染,浏览器拿到页面之后,解析出来dom结构,导致100+的图片瞬间加载,严重浪费了宽带资源,加重服务器负担,因此打算延迟加载图片 模 ...