当前位置: 首页 > news >正文

前端面试题 口语化复述解答(从2025.3.8 开始频繁更新中)

背景

看了很多面试题及其答案。但是过于标准化,一般不能直接用于回复面试官,这里我将总结一系列面试题,用于自我复习也乐于分享给大家,欢迎大家提供建议,我必不断完善之。

Javascript

ES6

1. var let const 的区别:

它们均是变量声明的关键字,其中let const是ES6新增关键字。引入这两个关键字的原因在于var没有块级作用域所导致变量滥用的问题。

  1. var自带变量提升,js编译的时候会将所有用var声明的变量语句提升到整个作用域首位,所以在原有声明前引用该变量不会报错。
  2. 而let const在变量声明前引用则会报错,原因即此二者无法变量提升导致存在暂时性死区,即从当前作用域的首部开始到变量声明前的上下文无法引用该变量
  3. var 滥用原因还有可以多次声明同一标识符,这是let const无法做到的。并且由于var 没有块级作用域,用var声明了一个标识符后 在其块级作用域后又重新声明一次则会导致原值被替换为新值。但是var是拥有函数作用域的,所以在函数中重新声明该标识符,在函数作用域外的值则不会被替换,但是如果没用var声明而只是赋值则会被替换。
  4. let 和 var的值是可以修改的,const 声明的变量对应的地址中的值是不能修改,但是如果当期变量是对象的话,其声明变量的地址中的值是一个指针,指向堆中的值,此时我们可以修改堆中的值(即const变量修改对象的属性是生效的)
  5. 根据最佳实践来说,尽量能用const就不用let,能用let就不用var

2. Promise 是什么?为什么要使用Promise?它的原理是什么?

Promise 名为期约,是 ES6新引入的一种JavaScript异步解决方案。它用于解决ES6之前连续多次异步操作时传统异步编程的多层回调嵌套的问题,俗称回调地狱。通过连续的then或catch的链式调用,降低了编码的难度同时又增加了代码的可读性。

// ES6以前的异步编程
doFirstThing(data,function (err1, data1) {if(err1) {...return}doSecondThing(data1, function (err2, data2){if(err2) {...return}doThrdThing(data2, function (err3, data3) {if(err3){...return}...})})
})// Promise异步编程
doFirstThing(data).then((data) => doSecondThing(data)).then((data) => doThirdThing(data)).catch((err) => {}).finally(() => {...})
  1. 基本用法
    Promise是一个对象,它有三种状态。即 Pending (进行中)Fulfilled (已完成的, 即成功状态) Rejected (已拒绝的,即失败状态), 当我们生成一个Promise的时候, 状态只能有一种改变,即从Pending-> Fulfilled或从Pending->Rejected。此三者是在其构造函数中进行处理,当我们 new 一个 Promise的时候,需要传入一个函数, 拥有 resolve和 reject方法,通过调用resolve(data) 表示成功处理数据状态,转到链式流程中的then方法中进行后续处理, 通过调用reject(err)表示处理期约失败的数据状态,最后还有一个finnally执行的回调,不管处理成功还是失败都会执行此回调。但其实then也能处理失败的回调,用于局部错误处理。通过then 使用第二个回调函数的参数即代表失败拒绝状态回调
new Promise((resolve, reject) => {...resolve(data)...reject(err)
}).then((data) => { ... }, (err) => { ... }).catch((err) => {})

但一般我们使用catch来全局处理err,这样语义化分工更易于理解,并且不需要每次then中使用第二个参数控制err更加方便处理。

  1. 静态方法

另外 Promise作为构造函数包含以下6种静态方法

Promise.resolve
Promise.reject
Promise.all
Promise.allSettled
Promise.race
Promise.any

a. 其中Promise.resolve和Promise.reject返回的分别是成功和失败的Promise对象,等价于前文new Promise((resolve, reject) => {}) 分别调用resolve和reject函数

b. Promise.all([promise1, promise2, promise3]) 并行执行多个Promise, 当所有promise处理成功时即返回一个处理结果数组,依次为传入promise数组的处理结果。当某个Promise拒绝时,直接返回拒绝状态的err。

c. Promise.allSettled([promise1, promise2, promise3]) 格式与all类似,但它会等待所有promise返回结果,最后生成一个对象

//成功
{ status: 'fulfilled', value: results }//失败
{ status: 'rejected', reason: err }

d. Promise.race([promise1, promise2, promise3]) 为Promise竞速, 返回第一个完成的promise无论成功还是失败。

e. Promise.any([promise1, promise2, promise3]) 类似于Promise.race,但是它是返回的第一个已经成功的promise实例,如果全部失败则会报错

相关文章:

前端面试题 口语化复述解答(从2025.3.8 开始频繁更新中)

背景 看了很多面试题及其答案。但是过于标准化,一般不能直接用于回复面试官,这里我将总结一系列面试题,用于自我复习也乐于分享给大家,欢迎大家提供建议,我必不断完善之。 Javascript ES6 1. var let const 的区别…...

更多文章请查看

更多文章知识请移步至下面链接,期待你的关注 如需查看新文章,请前往: 博主知识库https://www.yuque.com/xinzaigeek...

vulnhub靶场之【digitalworld.local系列】的vengeance靶机

前言 靶机:digitalworld.local-vengeance,IP地址为192.168.10.10 攻击:kali,IP地址为192.168.10.6 kali采用VMware虚拟机,靶机选择使用VMware打开文件,都选择桥接网络 这里官方给的有两种方式&#xff…...

MySql的安装及数据库的基本操作命令

1.MySQL的安装 1.1进入MySQL官方网站 1.2点击下载 1.3下拉选择MySQL社区版 1.4选择你需要下载的版本及其安装的系统和下载方式 直接安装以及压缩包 建议选择8.4.4LST LST表明此版本为长期支持版 新手建议选择红框勾选的安装方式 1.5 安装包下载完毕之后点击安装 2.数据库…...

中性点直接接地电网接地故障Simulink仿真

1.模型简介 本仿真模型基于MATLAB/Simulink(版本MATLAB 2017Ra)软件。建议采用matlab2017 Ra及以上版本打开。(若需要其他版本可联系代为转换) 2.系统仿真图: 3.中性点直接接地电网接地故障基本概念(本仿…...

Linux16-数据库、HTML

数据库: 数据存储: 变量、数组、链表-------------》内存 :程序运行结束、掉电数据丢失 文件 : 外存:程序运行结束、掉电数据不丢失 数据库: …...

SpireCV荣获Gitee 最有价值开源项目称号

什么是GVP? GVP全称Gitee Valuable Project,意思为Gitee最有价值开源项目。作为GVP称号的获得者,SpireCV在开源社区中展现出了卓越的实力和影响力,为开源软件的发展和推广做出了积极的贡献。 这一荣誉不仅充分肯定了过去阿木实验…...

open-webui+deepseek api实现deepseek自由

虽然deepseek是免费的,但是官网的体验感太差。 所以才会有某种想法,想要更加舒服的使用deepseek。 1.Python虚拟环境 这个我就不多赘述,切记Python版本一定要和open-webui制定的版本一致。 2.deepseek api 去这个网站充点钱(…...

Hadoop八股

Hadoop八股 HadoopMapReduce考点MR on Yarn 分布式工作原理shuffle:MapTask 和 ReduceTask的处理流程MR中的MapTask 和 ReduceTask 的数量决定MR和Spark两者Shuffle的区别简单讲一下map- reduce 原理**MapReduce 的核心概念****MapReduce 的工作流程****MapReduce 的…...

.NET Core全屏截图,C#全屏截图

.NET Core全屏截图,C#全屏截图 使用框架: WPF.NET 8 using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Linq; using System.Text; using System.Threading.Tasks; using System.W…...

ajax之生成一个ajax的demo示例

目录 一. node.js和express ​二. 使用express创建后端服务 三. 创建前端 一. node.js和express ajax是前端在不刷新的情况下访问后端的技术,所以首先需要配置一个后端服务,可以使用node.js和express。 首先生成一个空项目,新建main目录…...

软件工程笔记下

从程序到软件☆ 章节 知识点 概论☆ 软件的定义,特点,生存周期。软件工程的概论。软件危机。 1.☆软件:软件程序数据文档 (1)软件:是指在计算机系统的支持下,能够完成特定功能与性能的包括…...

【自学笔记】Numpy基础知识点总览-持续更新

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 Numpy基础知识点总览目录1. 简介Numpy是什么为什么使用Numpy 2. 数组对象(ndarray)创建数组数组的属性数组的形状操作 3. 数组的基本操作数组…...

大模型gpt结合drawio绘制流程图

draw下载地址 根据不同操作系统选择不同的安装 截图给gpt 并让他生成drawio格式的,选上推理 在本地将生成的内容保存为xml格式 使用drawio打开 保存的xml文件 只能说效果一般。...

3.8【Q】cv

这个draw_line函数的逻辑和功能是什么?代码思路是什么?怎么写的? 这个t是什么?t.v[0]和t.v[1],[2]又是什么? void rst::rasterizer::draw(rst::pos_buf_id pos_buffer, rst::ind_buf_id ind_buffer, rst::Primitive ty…...

STM32F10XXX标准库函数及外设结构体

时钟 APB1 void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState):使能或失能 APB1 时钟 参数 可赋值 描述 RCC_APB1Periph RCC_APB1Periph_TIM2 RCC_APB1Periph_TIM3 RCC_APB1Periph_TIM4 RCC_APB1Periph_TIM5 RCC_APB1Peri…...

计算机毕业设计SpringBoot+Vue.js车辆管理系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...

剖析Manus:AI领域的创新先锋还是虚假泡沫?

在AI技术迅猛发展的当下,新的智能体不断涌现,其中Manus的出现可谓是一石激起千层浪。近期,OpenManus以极快速度复刻Manus,引发了广泛关注,但这也让我们更有必要深入剖析Manus,探究它究竟是货真价实的创新突…...

编程考古-Borland历史:《.EXE Interview》对Anders Hejlsberg关于Delphi的采访内容(中)

为了纪念Delphi在2002年2月14日发布的25周年(2020.2.12),这里有一段由.EXE杂志编辑Will Watts于1995年对Delphi首席架构师Anders Hejlsberg进行的采访记录。在这次采访中,Anders讨论了Delphi的设计与发展,以及即将到来的针对Windows 95的32位版本。 Q. 编译器引擎本身是用…...

GB28181视频平台LiveGBS在设置公网IP收流时,如何自定义修改收流端口区间

LiveGBS GB28181流媒体服务在接收视频的时候默认是使用30000-30249, webrtc流播放端口区间默认是UDP的30250-30500区间。有些网络环境不方便开放这么大的端口区间,下面介绍下如何修改配置这个区间。 从页面上修改这个区间,端口区间尽量设置大…...

从清洗到展示:一份完整的微博评论LDA分析Jupyter Notebook实战笔记(附避坑点)

从清洗到展示:一份完整的微博评论LDA分析Jupyter Notebook实战笔记(附避坑点) 在数据爆炸的时代,社交媒体评论中蕴藏着大量有价值的用户观点。本文将带你用Jupyter Notebook完整走通微博评论的主题分析流程,从原始数据…...

DownKyi如何成为B站视频下载的智能管家?8K高清+批量处理全解析

DownKyi如何成为B站视频下载的智能管家?8K高清批量处理全解析 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等…...

Driver Store Explorer:Windows驱动管理的终极解决方案

Driver Store Explorer:Windows驱动管理的终极解决方案 【免费下载链接】DriverStoreExplorer Driver Store Explorer [RAPR] 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer Driver Store Explorer(简称RAPR)是一…...

内存检测从入门到精通:Memtest86+实战指南

内存检测从入门到精通:Memtest86实战指南 【免费下载链接】memtest86plus memtest86plus: 一个独立的内存测试工具,用于x86和x86-64架构的计算机,提供比BIOS内存测试更全面的检查。 项目地址: https://gitcode.com/gh_mirrors/me/memtest86…...

Win11环境实测:用C# EtherCAT库控制伺服电机,从TwinCAT配置到pcap抓包全流程避坑

Win11环境下的EtherCAT实战:C#控制伺服电机全流程解析 在工业自动化领域,EtherCAT凭借其高速、实时的特性已成为运动控制系统的首选协议之一。本文将带你深入Windows 11环境下使用C#开发EtherCAT主站的全过程,从TwinCAT配置到实际控制伺服电机…...

GitLab vs Gitea 深度解析:如何选择适合你的代码托管方案?

1. 核心定位与适用场景对比 第一次接触代码托管平台时,我和很多开发者一样在GitLab和Gitea之间纠结。经过三年在不同规模团队的实际使用,我发现这两个工具就像瑞士军刀和美工刀的关系——没有绝对的好坏,关键看你要切什么。 GitLab更像是个&q…...

MySQL误删数据别慌!手把手教你用binlog2sql从ROW格式日志恢复(附常见报错解决方案)

MySQL数据恢复实战:从误删到完美还原的完整指南 凌晨三点,当大多数人都沉浸在梦乡时,数据库管理员小李却被一阵急促的电话铃声惊醒。生产环境的核心用户表被误操作清空,数百万条用户数据瞬间消失。这种场景对于任何DBA来说都是噩梦…...

淘宝淘金币自动化脚本:每天节省20分钟的终极解决方案

淘宝淘金币自动化脚本:每天节省20分钟的终极解决方案 【免费下载链接】taojinbi 淘宝淘金币自动执行脚本,包含蚂蚁森林收取能量,芭芭农场全任务,解放你的双手 项目地址: https://gitcode.com/gh_mirrors/ta/taojinbi 淘宝淘…...

嵌入式Linux开发板CH340驱动安装避坑指南(附详细步骤图)

嵌入式Linux开发板CH340驱动安装全流程解析与疑难排错 第一次接触嵌入式Linux开发板时,最让人头疼的往往不是代码编写,而是最基础的开发环境搭建。作为连接电脑与开发板的重要桥梁,CH340串口驱动的安装质量直接决定了后续调试效率。许多初学者…...

拒绝手动排版!用Word域代码+样式库打造自动化技术文档(含GitHub模板)

拒绝手动排版!用Word域代码样式库打造自动化技术文档(含GitHub模板) 技术文档工程师的日常往往被格式调整、编号校对这类重复劳动占据。我曾见过团队因为手动调整200页需求文档的标题格式,导致版本发布时间延误三天。其实&#x…...