es6的100个问题
基础概念
- 解释
let
、const
和var
的区别。 - 什么是块级作用域?ES6 如何实现它?
- 箭头函数和普通函数的主要区别是什么?
- 解释模板字符串(Template Literals)的用途,并举例嵌套变量的写法。
- 解构赋值的语法是什么?如何解构对象和数组?
- 如何为解构赋值设置默认值?
- 扩展运算符(Spread Operator)有哪些用途?举例说明。
- 剩余参数(Rest Parameters)的作用是什么?和
arguments
对象的区别? - 解释 ES6 的
class
语法与传统构造函数的异同。 - 模块化中
export default
和export
的区别是什么?
代码输出与分析
- 以下代码输出什么?为什么?
for (var i = 0; i < 3; i++) {setTimeout(() => console.log(i), 0);
}
// 改为 let 后输出什么?
- 以下代码的输出结果是什么?
const obj = { a: 1, b: 2 };
const { a: x, b: y } = obj;
console.log(x, y);
- 箭头函数中的
this
指向哪里?以下代码输出什么?
const obj = {name: "Alice",greet: () => console.log(this.name)
};
obj.greet();
- 以下代码的输出是什么?
const [a, , b] = [1, 2, 3];
console.log(a, b);
- 以下代码是否报错?为什么?
const a = 1;
a = 2;
- 以下代码的输出结果是什么?
const arr = [...'hello'];
console.log(arr);
- 以下代码的输出是什么?
function foo(x = 1, y = x) { console.log(y); }
foo(2);
- 以下代码的输出结果是什么?
const obj1 = { a: 1 };
const obj2 = { ...obj1, b: 2 };
console.log(obj2 === obj1);
- 以下代码是否合法?
const func = (a, b, ...rest, c) => {};
- 以下代码的输出是什么?
const { a = 10, b = 5 } = { a: 3 };
console.log(a + b);
高级特性
- 什么是
Promise
?如何解决回调地狱问题? - 手写一个简单的
Promise
实现。 Promise.all
和Promise.race
的区别是什么?async/await
的工作原理是什么?如何捕获错误?- 解释生成器(Generator)的执行过程,写出一个生成器示例。
Symbol
的作用是什么?如何创建全局唯一的 Symbol?Map
和普通对象的区别是什么?WeakMap
有什么特性?Set
如何实现数组去重?Proxy
的用途是什么?写出一个拦截读取属性的示例。Reflect
对象的设计目的是什么?
综合应用
- 使用解构赋值交换两个变量的值。
- 用箭头函数实现一个阶乘函数。
- 使用扩展运算符合并两个对象。
- 用
Array.from
将类数组转为数组。 - 使用模板字符串编写多行 HTML 模板。
- 用
fetch
和async/await
实现数据请求。 - 实现一个简单的模块化项目(导出函数,导入并使用)。
- 使用
Map
实现一个缓存机制。 - 用
Proxy
实现数据双向绑定。 - 使用生成器实现斐波那契数列。
原理与陷阱
- 解释暂时性死区(Temporal Dead Zone)。
const
声明的对象属性可以修改吗?为什么?- 箭头函数能否用作构造函数?为什么?
Object.assign
是深拷贝还是浅拷贝?- 如何实现类的私有属性?(使用 Symbol 或 WeakMap)
- 解释
for...of
循环的内部机制(迭代器协议)。 - 模块加载的
import
是同步还是异步? - 为什么
WeakMap
的键必须是对象? - 解释尾调用优化(Tail Call Optimization)的条件。
async
函数的返回值是什么?
进阶题目
- 手写实现
Promise.all
。 - 手写实现
Array.prototype.flat
(扁平化数组)。 - 实现一个观察者模式(使用 Proxy 或 ES6 Class)。
- 使用生成器实现异步任务调度。
- 解释
Object.is
与===
的区别。 - 如何用
Reflect
替代Object
上的方法? - 用 ES6 语法实现单例模式。
- 使用
Array.reduce
实现Array.map
功能。 - 解释
String.raw
的用途。 - 如何用
Intl
对象实现国际化?
代码改错与优化
- 找出以下代码的问题:
let x = 10;
if (true) {var x = 20;
}
- 修复箭头函数中的
this
问题:
const obj = {data: [1, 2, 3],getData: () => {return this.data;}
};
- 以下代码有何隐患?
const obj = { a: 1 };
const copy = Object.assign({}, obj);
copy.a = 2;
- 如何让以下代码输出
0, 1, 2
?
for (var i = 0; i < 3; i++) {setTimeout(() => console.log(i), 0);
}
- 如何正确使用
async/await
改写以下代码?
fetch(url).then(res => res.json()).then(data => console.log(data));
开放性问题
- ES6 中最值得推荐的特性是什么?为什么?
- 如何理解 JavaScript 的“模块化演进”?
Promise
和async/await
如何改变异步编程?- ES6 的类与 ES5 的构造函数有何本质区别?
- 解释 Event Loop 并画图说明
Promise
的执行顺序。
更多代码题
- 输出以下代码的结果:
console.log(typeof Symbol('id'));
- 以下代码的输出是什么?
const map = new Map();
map.set('a', 1);
map.set('b', 2);
console.log([...map]);
- 以下代码的输出是什么?
const set = new Set([1, 2, 2, 3]);
console.log(set.size);
- 以下代码是否报错?
new Promise((resolve) => resolve(1)).then(console.log);
- 以下代码的输出顺序是什么?
console.log(1);
setTimeout(() => console.log(2), 0);
Promise.resolve().then(() => console.log(3));
console.log(4);
- 如何使以下对象可迭代?
const obj = { a: 1, b: 2 };
// 使用 for...of 遍历值
- 以下代码的输出是什么?
function* gen() {yield 1;yield 2;
}
const g = gen();
console.log(g.next().value);
console.log(g.next().value);
- 以下代码的输出是什么?
const obj = { a: 1 };
const proxy = new Proxy(obj, {get(target, prop) {return prop in target ? target[prop] : 0;}
});
console.log(proxy.b);
- 以下代码的输出是什么?
const { a, ...rest } = { a: 1, b: 2, c: 3 };
console.log(rest);
- 以下代码的输出是什么?
const arr = [1, 2];
const result = arr.map(num => num * 2).filter(num => num > 2);
console.log(result);
高级原理
- 解释
Proxy
和Reflect
的关系。 Object.create(null)
和{}
的区别是什么?- 如何实现一个可取消的
Promise
? - 解释
Generator
的协程(Coroutine)概念。 async/await
如何通过 Babel 转换为 ES5 代码?- ES6 Module 和 CommonJS 的区别是什么?
- 如何检测浏览器是否支持 ES6 特性?
- 解释
super
关键字的用法和限制。 - 如何实现继承(使用
class
和extends
)? new.target
的作用是什么?
综合实战
- 实现一个基于
Promise
的延迟函数delay(ms)
。 - 用 ES6 语法实现一个简单的观察者模式(Pub/Sub)。
- 手写一个函数,实现对象的深拷贝。
- 使用
reduce
实现数组的扁平化和去重。 - 用
Proxy
实现数组的负数索引访问(如arr[-1]
)。 - 使用
Generator
实现一个状态机。 - 用
async/await
实现并发请求(Promise.all
)。 - 手写一个简单的
Router
类(基于 History API)。 - 使用
Intersection Observer API
实现懒加载。 - 实现一个基于
Web Workers
的多线程计算示例。
以上题目覆盖了 ES6 的核心语法、特性、应用场景及底层原理,建议结合代码实践和官方文档深入学习。如果需要详细解答,可以针对具体题目进一步探讨!
相关文章:
es6的100个问题
基础概念 解释 let、const 和 var 的区别。什么是块级作用域?ES6 如何实现它?箭头函数和普通函数的主要区别是什么?解释模板字符串(Template Literals)的用途,并举例嵌套变量的写法。解构赋值的语法是什么…...
在直播间如何和观众进行互动
在抖音直播间实现高效互动需要**技术话术工具**的立体化组合,以下是程序员可落地的深度互动方案: --- ### 一、技术驱动型互动策略 #### 1. **实时代码演示(硬核互动)** - **OBS虚拟摄像头屏幕共享** python # 用Flask创建实…...
mysql--用户管理
MySQL 用户管理完整指南 1. 查看用户信息 查看所有用户 SELECT User, Host, authentication_string FROM mysql.user;查看用户详细信息 SELECT * FROM mysql.user \G查看当前登录用户 SELECT CURRENT_USER();查看特定用户的权限 SHOW GRANTS FOR usernamehost;2. 创建用户…...
.NET三层架构详解
.NET三层架构详解 文章目录 .NET三层架构详解引言什么是三层架构表示层(Presentation Layer)业务逻辑层(Business Logic Layer,BLL)数据访问层(Data Access Layer,DAL) .NET三层架构…...
机器学习之回归
1. 引言 回归分析是机器学习中的基本技术之一,广泛用于预测连续型变量。本文调研了线性回归、多项式回归、岭回归、Lasso回归及弹性网络回归,重点分析其数学原理、算法推导、求解方法及应用场景。 2. 线性回归 2.1 概述 线性回归假设因变量与自变量之间存在线性关系,其目…...
危险化合物安全处理,有机反应淬灭操作解析
化学淬灭操作是指在化学反应过程中,通过人为干预快速终止反应的技术。在有机化学反应中,某一反应底物是过量的,当化学反应进行到一定程度,目标产物已经获得,该过量反应底物继续存在会进一步反应生成副产物或者影响后处…...
【前端】使用 HTML、CSS 和 JavaScript 创建一个数字时钟和搜索功能的网页
文章目录 ⭐前言⭐一、项目结构⭐二、HTML 结构⭐三、CSS 样式⭐四、JavaScript 功能⭐五、运行效果⭐总结 标题详情作者JosieBook头衔CSDN博客专家资格、阿里云社区专家博主、软件设计工程师博客内容开源、框架、软件工程、全栈(,NET/Java/Python/C)、数…...
【Linux】调试器——gdb使用
目录 一、预备知识 二、常用指令 三、调试技巧 (一)监视变量的变化指令 watch (二)更改指定变量的值 set var 正文 一、预备知识 程序的发布形式有两种,debug和release模式,Linux gcc/g出来的二进制…...
Windows10清理机器大全集
Windows10清理机器大全集 写在前面先这么个标题,逐渐补充禁止Update移除Microsoft Compatibility Telemetrywindows-defender-remover其它 写在前面 看到标题,读者已经就吐了。 我是说,我非常认可: IT从业者,如果你银子比较充足&…...
解决IDEA中maven找不到依赖项的问题
直接去官网找到对应的依赖项jar包,并且下载到本地,然后安装到本地厂库中。 Maven官网:https://mvnrepository.com/ 一、使用mvn install:install-file命令 Maven提供了install:install-file插件,用于手动将jar包安装到本地仓库…...
端游熊猫脚本游戏精灵助手2025游戏办公脚本工具!游戏脚本软件免费使用
在当下这个崇尚高效与便捷的时代,自动化工具已然成为诸多开发者与企业提升工作效率的关键选择。熊猫精灵脚本助手作为一款极具实力的自动化工具,凭借其多样的功能以及广泛的应用场景,逐步成为众多用户的首要之选。 熊猫精灵脚本助手整合了丰…...
知识就是力量——物联网应用技术
基础知识篇 一、常用电子元器件1——USB Type C 接口引脚详解特点接口定义作用主从设备关于6P引脚的简介 2——常用通信芯片CH343P概述特点引脚定义 CH340概述特点封装 3——蜂鸣器概述类型驱动电路原文链接 二、常用封装介绍贴片电阻电容封装介绍封装尺寸与功率关系࿱…...
第4.1节:使用正则表达式
1 第4.1节:使用正则表达式 将正则表达式用斜杠括起来,就能用作模式。随后,该正则表达式会与每条输入记录的完整文本进行比对。(通常情况下,它只需匹配文本的部分内容就能视作匹配成功。)例如,以…...
Linux目录及文件管理
目录 一.Linux目录基本结构 1.常见目录及其作用 二.常用文件处理命令 1.七类常见的linux的文件 2.cat(查看文件内容) 3.more(分页查看文件内容) 4.less(分页查看文件内容) 5.head(从头部查看文件内容࿰…...
【MySQL】从零开始:掌握MySQL数据库的核心概念(五)
由于我的无知,我对生存方式只有一个非常普通的信条:不许后悔。 前言 这是我自己学习mysql数据库的第五篇博客总结。后期我会继续把mysql数据库学习笔记开源至博客上。 上一期笔记是关于mysql数据库的增删查改,没看的同学可以过去看看…...
进军场景智能体,云迹机器人又快了一步
(图片来源:Pixels) 2025年,AI和机器人行业都发生了巨大改变。 数科星球原创 作者丨苑晶 编辑丨大兔 2025年,酒店行业正掀起一股批量采购具备AI功能的软硬一体解决方案的热潮。 在DeepSeek、Manus等国产AI软件的推动…...
【实战ES】实战 Elasticsearch:快速上手与深度实践-5.2.1 多字段权重控制(标题、品牌、类目)
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 电商商品搜索实战:多字段权重控制策略1. 业务场景与核心挑战1.1 典型搜索问题1.2 权重失衡的影响数据 2. 权重控制核心方案2.1 字段权重分配矩阵2.2 多策略组合方…...
Ubuntu24.04 离线安装 MySQL8.0.41
一、环境准备 1.1 官方下载MySQL8.0.41 完整包 1.2 上传包 & 解压 上传包名称是:mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundle.tar # 切换到上传目录 cd /home/MySQL8 # 解压: tar -xvf mysql-server_8.0.41-1ubuntu24.04_amd64.deb-bundl…...
【Django】教程-3-数据库相关介绍
【Django】教程-1-安装创建项目目录结构介绍 【Django】教程-2-前端-目录结构介绍 4.数据库连接配置 需要手动创建数据库,数据库无法自动创建 ,ORM可以创建表,操作表 注意:负责app下mondels.py写类时,无法在数据库中…...
OpenGL绘制文本
一:QPainter绘制 在 OpenGL 渲染的窗口中(如 QOpenGLWidget),通过 QPainter 直接绘制文本。Qt 会自动将 2D 内容(文本、图形)与 OpenGL 内容合成。在paintGL()里面绘制,如果有其他纹理…...
DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加行拖拽排序功能示例6,TableView16_06 分页表格拖拽排序
前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 Deep…...
【解决】导入PNG图片,转 Sprite 格式成功但资产未生效问题
开发平台:Unity 6.0 图片格式:.png 问题描述 当 PNG 成功转换为 Sprite(精灵)时,资产状态将显示扩展箭头,即表明该资产可 Sprite 使用。 解决方法:设置正确的 Sprite Mode Single 关于 Spr…...
【科研绘图系列】R语言绘制重点物种进化树图(taxa phylogenetic tree)
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图输出图片系统信息介绍 【科研绘图系列】R语言绘制重点物种进化树图(taxa phylogenetic tree) 加载R包 library(tidyverse) library(ape…...
Flutter入门教程:从零开始的Flutter开发指南
Flutter入门教程:从环境搭建到应用发布 概述 本文提供了全面的Flutter入门教程,涵盖环境搭建、基础Widget使用、界面设计与美化,以及实战项目开发等内容。通过本教程,开发者能够快速上手Flutter开发,掌握开发跨平台应…...
CentOS 7 源码安装libjsoncpp-1.9.5库
安装依赖工具 sudo yum install cmake make gcc cmake 需要升级至 3.8.0 以上可参考:CentOS安装CMakegcc 需要升级至9.0 以上可参考:CentOS 7升级gcc版本 下载源码 wget https://github.com/open-source-parsers/jsoncpp/archive/refs/tags/1.9.5.…...
调用高德天气Api,并展示对应天气图标
1、申请高德key 点击高德官网申请 必须有key才能调用高德api 小提示:每日/每秒调用api次数有限,尽量不要循环调用。 每日大概5000,每秒3次 2、查看文档 高德官网天气api接口文档 请求示例: https://restapi.amap.com/v3/weat…...
DSP开发板的JTAG接口
(1)普中DSP28335 (2)研旭DSP28388 (3)延华DSP28335 (3)M新动力28377D电机控制板...
1.25-20GHz/500ns超快跳频!盛铂SWFA300国产捷变频频率综合器模块赋能雷达/5G/电子战高频精密控制 本振/频综模块
盛铂SWFA300捷变频频率综合器模块简述: 盛铂科技国产SWFA300捷变频频率综合器是一款在频率范围内任意两点频率的跳频时间在500nS以内的高速跳频源,其输出频率范围为1.25GHz至20GHz,频率的最小步进为10kHz。同时它拥有优秀的相位噪声特性&…...
nestjs 多环境配置
这里使用yaml进行多环境配置,需要安装nestjs/config、js-yaml、types/js-yaml js-yaml、types/js-yaml 主要用来读取yaml文件以及指定类型使用 官方教程:Documentation | NestJS - A progressive Node.js framework 1、下载 npm i --save nestjs/confi…...
CentOS7系统更新yum源教程
由于CentOS 7 在2024年6月30号以后官方不再维护。很多yum源也陆续关掉了,所以我们要更换镜像源。yum是一个用于软件包管理的工具,它能够从特定的存储库中自动下载和安装软件包。然而,系统默认的yum源可能不包含所有软件包,因此需要…...
Python正则表达式(二)
目录 六、re.findall()函数和分组 1、0/1分组情况 2、多分组情况 七、或“|”的用法 1、作用域 2、用法 八、贪婪模式和懒惰模式 1、量词的贪婪模式 2、量词的懒惰模式 九、匹配对象 1、相关函数 六、re.findall()函数和分组 1、0/1分组情况 在正则表达式中&#x…...
MySQL中如何进行SQL调优?
SQL 调优是提高 MySQL 数据库性能的关键环节。以下是 MySQL SQL 调优的主要方法和技巧 一、使用 EXPLAIN 分析查询 EXPLAIN SELECT * FROM users WHERE user_name 张三;查看执行计划,了解 MySQL 如何处理查询重点关注 type、key、rows、Extra 列type 最好能达到 …...
Android15查看函数调用关系
Android15 Camera3中打印函数调用栈 1.使用CallStack跟踪函数调用 修改涉及三个内容: Android.bp中添加对CallStack的引用。CallStack被打包在libutilscallstack.so。代码中包含CallStack的头文件。代码中调用CallStack接口,打印函数调用栈。 例子&am…...
Containerd+Kubernetes搭建k8s集群
虚拟机环境设置,如果不是虚拟机可以忽略不看 1、安装配置containerd 1.1 添加 Kubernetes 官方仓库 安装cri-tools的时候需要用到 cat > /etc/yum.repos.d/kubernetes.repo << EOF [kubernetes] nameKubernetes baseurlhttps://mirrors.aliyun.com/kub…...
【Spring AI】基于专属知识库的RAG智能问答小程序开发——功能优化:用户鉴权主体功能开发
系列文章目录 【Spring AI】基于专属知识库的RAG智能问答小程序开发——完整项目(含完整前端后端代码)【Spring AI】基于专属知识库的RAG智能问答小程序开发——代码逐行精讲:核心ChatClient对象相关构造函数【Spring AI】基于专属知识库的R…...
个人学习编程(3-24) 数据结构
括号的匹配: if((s[i]) && now() || (s[i]] && now[)){ #include <bits/stdc.h>using namespace std;int main() {char s[300];scanf("%s",&s);int i;int len strlen(s);stack <char> st;for (i 0; i < len; i){if(…...
比特币等虚拟货币实时价格使用说明,数字货币价格获取,k线获取,实时价格获取
数据截图 k线数据 websocket 实时价格数据 根据这些数据可以做出自己的产品 获取时间段内的k线数据 在开始之前,你需要知道的知识: 币种缩写英文名币种IDBTCBitcoinbitcoinETHEthereumethereumEOSEOSeosUSDTTethertetherLTCLitecoinlitecoinUSDDol…...
【漏洞修复】为了修复ARM64 Android10系统的第三方库漏洞,将ARM64 Android16的系统库直接拷贝到Android10系统如何?
直接替换系统库的风险分析 将高版本Android(如Android 16)的系统库直接拷贝到低版本系统(如Android 10)可能会导致以下问题: 符号与依赖不兼容 高版本库可能依赖更高版本的NDK或Bionic libc(Android的C库&…...
【深度学习与实战】2.1、线性回归模型与梯度下降法先导
import numpy as np# 数据准备 X np.array([1, 2, 3]) y np.array([3, 5, 7])# 参数初始化 w0, w1 0, 0 alpha 0.1 n len(X)# 迭代10次 for epoch in range(10):# 计算预测值y_pred w1 * X w0# 计算梯度grad_w0 (1/n) * np.sum(y_pred - y)grad_w1 (1/n) * np.sum((y_…...
SQL Server 2008安装教程
目录 一.安装SQL Server 二.安装SQL Server Management Studio 三.使用SQL Server Management Studio 一.安装SQL Server 官网下载:SQL Server 下载 | Microsoft 1.选择安装中的全新安装如下图 2.功能选择 3.实例配置 4.后面一直下一步到数据库引擎配置 密码自己设置 系统…...
协作机械臂需要加安全墙吗? 安全墙 光栅 干涉区
安全墙是什么 文章目录 安全墙是什么简介1. 物理安全墙1.1 定义:1.2 作用机制:1.3 应用场景: 2. 虚拟安全墙2.2 定义:2.3 作用机制:2.3 应用场景: 3. 安全毛毯3.1 工作原理:3.2 特点3.3 应用场景…...
Android第六次面试总结(自定义 View与事件分发)
在 Android 中实现自定义 View 处理 1 万条数据的流畅滑动,需结合视图复用、按需绘制、硬件加速等核心技术。以下是具体实现方案: 一、核心优化策略 1. 视图复用机制(类似 RecyclerView) ViewHolder 模式:将每个数据…...
深度解读 AWS IAM:身份访问管理与安全的核心纽带
导语 在 AWS(亚马逊云服务)的生态体系中,AWS IAM(Identity and Access Management)犹如坚固的堡垒,守护着用户在云端的各类资源。它不仅是管理用户身份与访问权限的关键工具,更是维系 AWS 安全…...
Oracle相关的面试题
以下是150道Oracle相关的面试题,涵盖了Oracle的基础概念、架构、SQL与PL/SQL、性能调优、高可用性、备份与恢复、安全、分区与索引、存储与内存管理、网络与连接、版本与升级等方面,希望对你有所帮助。 Oracle基础概念 1. 什么是Oracle数据库࿱…...
DQL语句-distinct去重
MySQL | DQL语句-distinct去重 🪄个人博客:https://vite.xingji.fun 查询工作岗位 select job from emp;mysql> select job from emp;----------- | job | ----------- | CLERK | | SALESMAN | | SALESMAN | | MANAGER | | SALESMAN …...
GroupDocs.Total for Java 摸索学习
继Aspose.Total for Java 全套组件的学习之后,发现了GroupDocs.Total系列产品的13款,也是花了许久的事件,逐个的学习摸索、深度分析、总结实践,掌握了它们的科学使用。 商业技术软件,作为技术广度学习探索使用&#x…...
⑦(ACG-网络配置)
网络配置是指对计算机网络的各种参数进行设置和调整,以实现网络正常运行和高效通信。网络配置包括多方面的内容,常见的配置包括: 1. IP地址设置:IP地址是设备在网络中的身份标识,设置IP地址是网络配置的基础ÿ…...
智能汽车图像及视频处理方案,支持视频智能包装能力
美摄科技的智能汽车图像及视频处理方案,通过深度学习算法与先进的色彩管理技术,能够自动调整图像中的亮度、对比度、饱和度等关键参数,确保在各种光线条件下,图像都能呈现出最接近人眼的自然色彩与细节层次。这不仅提升了驾驶者的…...
【电子通识】铅笔硬度简史:从石墨到工业标准
在工作中我们会发现有时要使用铅笔硬度计来测试材料的硬度。 比如说手机的液晶屏,我们可能要求要通过3H、4H等等。那么为什么会用铅笔来做硬度测试呢?这就要知道相关的历史了。 铅笔硬度简史:从石墨到工业标准 “一支铅笔,如何成…...
前端自动化测试(一):揭秘自动化测试秘诀
目录 [TOC](目录)前言自动化测试 VS 手动测试测试分类何为单元测试单元测试的优缺点优点缺点 测试案例测试代码 测试函数的封装实现 expect 方法实现 test 函数结语 正文开始 , 如果觉得文章对您有帮助,请帮我三连订阅,谢谢💖&…...