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

现代 JavaScript 的入门教程

现代 JavaScript 的定义

现代 JavaScript 通常指的是自 ECMAScript 2015(也称为 ES6)以来的一系列语言更新和改进,以及随之而来的开发工具、库和框架的生态系统。这些变化不仅增强了 JavaScript 的功能性和表达能力,还推动了更高效、更模块化和更具可维护性的编程实践。以下是现代 JavaScript 的一些关键特征:

1. 新的语言特性

  • ES6+ 特性:包括箭头函数、letconst 关键字、模板字符串、解构赋值、默认参数、剩余/扩展运算符、类语法等。
  • 异步编程:引入了 Promises 和 async/await,使得处理异步操作更加直观和简洁。
  • 模块系统:通过 importexport 语句支持原生模块化开发,取代了早期的全局变量或命名空间模式。

2. 工具链与构建流程

  • 编译器:如 Babel,它可以将较新的 JavaScript 代码转换为向后兼容的形式,确保在旧版本浏览器中也能正常运行。
  • 打包工具:如 Webpack 或 Rollup,它们能够优化资源加载、执行代码分割、移除未使用的代码(Tree Shaking)等。
  • 任务运行器:例如 Gulp 或 Grunt,用于自动化常见的开发任务,如压缩文件、启动服务器、运行测试等。

3. 框架和库

  • 前端框架:Vue.js、React、Angular 等提供了完整的 MVC 或 MVVM 架构支持,增强了组件化开发的能力。
  • 状态管理库:如 Redux、Vuex,帮助管理复杂应用中的数据流和状态变更。
  • UI 组件库:Material-UI、Ant Design 等,提供了一套现成的设计组件,加快了界面开发的速度。

4. 开发环境

  • 集成开发环境 (IDE):像 Visual Studio Code 这样的现代编辑器内置了丰富的插件和扩展,极大地提高了开发效率。
  • 调试工具:Chrome DevTools 等高级调试工具支持 Source Maps,即使经过编译后的代码也可以方便地进行源码级别的调试。
  • 版本控制系统:Git 是标准的版本控制工具,广泛应用于团队协作和项目管理。

5. 社区与标准化

  • 活跃的社区:JavaScript 拥有一个庞大且活跃的开发者社区,不断提出新特性和改进建议。
  • 标准化组织:TC39 委员会负责推进 JavaScript 标准的发展,确保新特性经过充分讨论和审查后再纳入正式规范。

6. 最佳实践

  • 模块化设计:鼓励将应用程序拆分为小而独立的功能单元,提高代码复用性和可维护性。
  • 声明式编程:强调描述“做什么”而不是“怎么做”,简化代码逻辑并减少副作用。
  • 测试驱动开发 (TDD):编写自动化测试以验证代码行为,保证质量的同时加快迭代速度。
  • 持续集成/持续部署 (CI/CD):自动化构建、测试和部署流程,确保每次更改都能快速可靠地发布到生产环境中。

7. 性能优化

  • 懒加载:只在需要时加载必要的资源,减少初始页面加载时间。
  • 代码分割:将大型代码库拆分成多个较小的部分,按需加载,进一步提升性能。
  • Tree Shaking:移除未引用的代码,减小程序体积。

现代 JavaScript 不仅仅是指语言本身的新特性,它还包括了一个完整的技术栈,涵盖了从开发工具、库和框架到最佳实践和工作流程等多个方面。这种全面的进步让 JavaScript 成为了一个强大、灵活且充满活力的编程平台,适用于从简单的网页交互到复杂的企业级应用的各种场景。随着新技术的不断涌现,JavaScript 社区也在持续进步和发展,为开发者提供了越来越多的机会来创建令人惊叹的应用程序。

当然,下面是一个现代 JavaScript 的入门教程,它涵盖了 ES6+(ECMAScript 2015 及以后版本)中的一些重要特性,并介绍了如何使用这些特性来编写更简洁、可维护的代码。这个教程适合已经有一些编程基础的人士,特别是那些熟悉早期 JavaScript 或其他编程语言的人。

现代 JavaScript 入门教程

1. 安装 Node.js 和 npm

为了在本地环境中运行和测试 JavaScript 代码,建议安装 Node.js,它包含了 npm(Node Package Manager),这是 JavaScript 的包管理工具。它允许开发者轻松地安装、共享、分发和管理 JavaScript 代码包(库或框架)。npm 提供了一个庞大的在线仓库,名为 npm Registry,其中包含了超过一百万个开源包,涵盖了从工具链到用户界面组件的各种资源。现代 JavaScript 强调模块化编程,而 npm 正好提供了理想的工具来管理和组织这些模块。无论是前端还是后端应用,都可以依赖 npm 来处理复杂的依赖关系

  1. npm 可以帮助项目追踪其依赖项,并确保每个依赖项都使用正确的版本。通过 package.json 文件,你可以明确指定项目所需的各个库及其版本范围。
    使用简单的命令行指令,如 npm install ,可以快速下载并安装第三方库。同样,npm update 命令可以将所有依赖更新到最新版本(根据 package.json 中定义的版本策略)。
    在 package.json 中定义脚本,例如构建、测试、启动服务器等任务,可以通过 npm run 来执行这些自定义命令。
    新加入一个项目时,只需运行 npm install 即可自动解析并安装所有必要的依赖,简化了开发环境的设置过程。
  2. 下载并安装最新版本的 Node.js。
  3. 打开命令行工具(如 Terminal 或 Command Prompt),输入 node -v 检查是否正确安装了 Node.js。
  4. 输入 npm -v 检查 npm 是否也已安装。
2. 创建项目结构

创建一个新的文件夹作为你的项目根目录,并初始化一个 npm 项目:

mkdir modern-js-tutorial
cd modern-js-tutorial
npm init -y

这将生成一个 package.json 文件,用来记录项目的依赖关系和其他元数据。

3. 编写第一个模块化脚本

在项目根目录下创建两个文件:greet.jsmain.js

greet.js

// 导出函数 greet
export const greet = (name) => `Hello, ${name}!`;

main.js

// 从 greet.js 导入 greet 函数
import { greet } from './greet';console.log(greet('World'));
4. 编译和运行代码

由于浏览器可能不完全支持最新的 JavaScript 特性,我们通常会使用 Babel 将代码转换为向后兼容的形式。Babel 是一个广泛使用的 JavaScript 编译器,它允许开发者编写下一代 JavaScript 代码(如 ES6+),然后将其转换为向后兼容的版本(如 ES5),以确保在旧版浏览器或环境中也能正常运行。Babel 的核心功能是解析、转换和生成 JavaScript 代码,使其能够跨越不同的 ECMAScript 标准版本。首先,安装 Babel 及相关插件:

npm install --save-dev @babel/core @babel/cli @babel/preset-env

然后,在 package.json 中添加一个 script 来运行 Babel:

"scripts": {"build": "babel src -d dist"
}

创建一个名为 .babelrc 的配置文件:

{"presets": ["@babel/preset-env"]
}

现在你可以通过以下命令编译代码:

npx babel main.js --out-file compiled.js

最后,在命令行中执行编译后的代码:

node compiled.js

你应该会在控制台看到输出 "Hello, World!"

5. 学习更多 ES6+ 特性
5.1 箭头函数

简化函数定义,自动绑定 this:

const add = (a, b) => a + b;
console.log(add(2, 3)); // 输出 5
5.2 let 和 const

代替 var 关键字,提供块级作用域:

let x = 10;
if (true) {let y = 20;console.log(x, y); // 输出 10 20
}
console.log(x); // 输出 10
// console.log(y); // 抛出错误: y is not defined
5.3 模板字符串

允许内嵌表达式和多行文本:

const name = 'Alice';
console.log(`Hello, ${name}. How are you?`);
5.4 解构赋值

从数组或对象中提取值:

const [first, second] = ['apple', 'banana'];
console.log(first, second); // 输出 apple bananaconst { message } = { message: 'Hello!' };
console.log(message); // 输出 Hello!
5.5 默认参数

设置函数参数的默认值:

function greet(name = 'Guest') {return `Hello, ${name}!`;
}
console.log(greet()); // 输出 Hello, Guest!
console.log(greet('John')); // 输出 Hello, John!
5.6 剩余/扩展运算符

用于处理不定数量的参数或合并数组/对象:

const numbers = [1, 2, 3];
console.log(...numbers); // 输出 1 2 3const newNumbers = [...numbers, 4, 5];
console.log(newNumbers); // 输出 [1, 2, 3, 4, 5]const obj1 = { a: 1, b: 2 };
const obj2 = { ...obj1, c: 3 };
console.log(obj2); // 输出 { a: 1, b: 2, c: 3 }
5.7

ES6 引入了面向对象编程的支持:

class Person {constructor(name) {this.name = name;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}const person = new Person('Bob');
person.sayHello(); // 输出 Hello, my name is Bob
6. 异步编程
6.1 Promise

替代传统的回调函数,更好地处理异步操作:

const fetchData = () =>new Promise((resolve, reject) => {setTimeout(() => resolve('Data fetched!'), 1000);});fetchData().then(data => console.log(data));
6.2 async/await

让异步代码看起来像同步代码,提高可读性和易用性:

async function fetchDataAsync() {const data = await fetchData();console.log(data);
}fetchDataAsync();
7. 模块化开发

利用 import/export 实现模块化开发,使代码更加清晰和易于维护。

8. 调试与工具链
  • 使用 Source Maps 调试经过编译的代码。
  • 配置 Webpack 或 Rollup 等构建工具来优化打包过程。
  • 利用 ESLint 进行代码风格检查和错误预防。
9. 实践练习
  • 构建一个小的应用程序,比如待办事项列表(To-Do List),尝试应用所学的知识点。
  • 探索 Vue.js、React 或 Angular 等流行的前端框架,体验组件化开发的魅力。

以上就是一份简要的现代 JavaScript 入门教程。随着你对这些概念和技术的理解加深,可以继续深入研究更高级的主题,如性能优化、状态管理和服务器端渲染等。祝你在学习过程中取得进步!

相关文章:

现代 JavaScript 的入门教程

现代 JavaScript 的定义 现代 JavaScript 通常指的是自 ECMAScript 2015(也称为 ES6)以来的一系列语言更新和改进,以及随之而来的开发工具、库和框架的生态系统。这些变化不仅增强了 JavaScript 的功能性和表达能力,还推动了更高…...

linux naive代理设置

naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...

Java数据结构 (链表反转(LinkedList----Leetcode206))

1. 链表的当前结构 每个方框代表一个节点,每个节点包含两个部分: 左侧的数字:节点存储的值,例如 45、34 等。右侧的地址(如 0x90):表示该节点 next 指针指向的下一个节点的内存地址。 例子中&a…...

游戏与硬件深度协同,打造更精细的体验优化

高画质的游戏往往带来手机的发热和卡顿从而影响游戏体验。开发者希望能够获取到手机运行的实时状态,从而能够进行主动的负载调节,将手机发热时游戏体验影响降到最低;同时手机也可以通过游戏传入的关键场景如"正在下载资源"“团战中…...

C++实现设计模式---命令模式 (Command)

命令模式 (Command) 命令模式 是一种行为型设计模式,它将请求封装为一个对象,从而使得可以用不同的请求对客户端进行参数化、对请求排队或记录日志,以及支持可撤销的操作。 意图 将操作的调用者与接收者分离,通过将请求封装为独…...

office 2019 关闭word窗口后卡死未响应

最近关闭word文件总是出现卡死未响应的状态,必须从任务管理器才能杀掉word 进程,然后重新打开word再保存,很是麻烦。(#其他特征,在word中打字会特别变慢,敲击键盘半秒才出现字符。) office官网…...

flutter入门系列教程<三>:tabbar的高度自适用,支持无限滚动

背景 在之前的文章中,简介了tabbar组件的使用,它通常用于顶部放置tabbar标签页头,内容全部都是TabbarView的全部内容,且内容通常是占满屏幕的(尽可能大),如下: 但是有时候我们需要…...

前端三件套详解之 HTML

HTML: 师承b站pink老师【黑马程序员pink老师前端入门教程,零基础必看的h5(html5)css3移动端前端视频教程】 HTML概述 超文本标记语言(英语:HyperText Markup Language,简称:HTML)是一种用于创…...

【pytorch 】miniconda python3.11 环境安装pytorch

ubuntu24.04 miniconda python3.11 环境安装pytorch 组件:langgraph本身不需要有一些模型是需要的:python3.11环境:报错ModuleNotFoundError: No module named ‘torchaudio’ ModuleNotFoundError: No module named ‘torchaudio’File "/root/miniconda3/envs/05_ep_…...

支持大功率输出高速频闪的图像处理用光源控制器

机器视觉系统中的光源控制器在确保图像质量、提高系统稳定性、降低能耗以及方便系统扩展和升级等方面发挥着重要作用。它可提供稳定光源,调节参数,另外具有操作便捷性。 下面我们来看Gardasoft的光源控制器,Gardasoft拥有作为图像处理用LED光…...

使用 Python 和 Tesseract 实现验证码识别

验证码识别是一个常见且实用的技术需求,尤其是在自动化测试和数据采集场景中。通过开源 OCR(Optical Character Recognition,光学字符识别)工具 Tesseract,结合 Python 的强大生态,我们可以高效实现验证码识…...

Opencv学习

Long time no see!哈哈,假期终于有时间做一点自己喜欢的东西了 还是想说,每天花一点时间投在自己喜欢的事情上,或者专攻一些平时不学的方向,真的很酷! 图片绘制 对于图像绘制,可以分为:图像创…...

数学大模型MAmmoTH:通过混合说明调整建立数学通才模型

向悦和陈文虎是该项目的主要作者。他们这个项目推出 MAmmoTH,这是一系列专为解决一般数学问题而定制的开源大型语言模型 (LLM)。 MAmmoTH 模型在 MathInstruct 上进行训练,MathInstruct 是我们精心策划的指令调整数据集。 MathInstruct 已编译 来自 13 个…...

springboot 配置多数据源以及动态切换数据源

场景 我们springboot项目,通常会有多个数据库,例如mysql,vertica,postgresql等等数据库,通常我们需要动态切换使用我们想要的数据库,这时候就需要配置多数据源了 多数据源特性 支持多数据库类型:例如,同…...

计算机图形学:实验三 光照与阴影

一、程序功能设计 设置了一个3D渲染场景,支持通过键盘和鼠标控制交互,能够动态调整光源位置、物体材质参数等,具有光照、阴影和材质效果的场景渲染。 OpenGL物体渲染和设置 创建3D物体:代码中通过 openGLObject 结构体表示一个…...

idea修改模块名导致程序编译出错

本文简单描述分别用Idea菜单、pom.xml文件管理项目模块module 踩过的坑: 通过idea菜单创建模块,并用idea菜单修改模块名,结构程序编译报错,出错的代码莫名奇妙。双击maven弹窗clean时,还是报错。因为模块是新建的&am…...

Arcgis国产化替代:Bigemap Pro正式发布

在数字化时代,数据如同新时代的石油,蕴含着巨大的价值。从商业决策到科研探索,从城市规划到环境监测,海量数据的高效处理、精准分析与直观可视化,已成为各行业突破发展瓶颈、实现转型升级的关键所在。历经十年精心打磨…...

RNN实现阿尔茨海默症的诊断识别

本文为为🔗365天深度学习训练营内部文章 原作者:K同学啊 一 导入数据 import torch.nn as nn import torch.nn.functional as F import torchvision,torch from sklearn.preprocessing import StandardScaler from torch.utils.data import TensorDatase…...

大数据学习(36)- Hive和YARN

&&大数据学习&& 🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦&#x1f91…...

【以音频软件FFmpeg为例】通过Python脚本将软件路径添加到Windows系统环境变量中的实现与原理分析

在Windows系统中,你可以通过修改环境变量 PATH 来使得 ffmpeg.exe 可在任意路径下直接使用。要通过Python修改环境变量并立即生效,如图: 你可以使用以下代码: import os import winreg as reg# ffmpeg.exe的路径 ffmpeg_path …...

计算机的错误计算(二百二十一)

摘要 利用一个数学解题器化简计算 实验表明,即使是数学解题器,也是一派胡言。 有一读者来信,询问数学大模型的推理事宜。现就前面的案例继续做一讨论。 例1. 化简计算摘要中算式。 下面是与一个数学解题器的对话。 点评: &am…...

小利特惠源码/生活缴费/电话费/油卡燃气/等充值业务类源码附带承兑系统

全新首发小利特惠/生活缴费/电话费/油卡燃气/等充值业务类源码附带U商承兑系统 安装教程如下 图片:...

外部flash烧写算法学习笔记(一)

一,STM32CubeProgrammer STM32下载编程工具 | STM32CubeProg介绍、下载、安装和使用教程 - 知乎 1.使用速览 2.外部烧写 二,QSPI外部烧写算法制作 STM32H7的花式玩转SPI Flash章节也更新了,含MDK下载算法制作和STM32CubeProg下载算法制作 …...

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道,通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…...

差分轮算法-两个轮子计算速度的方法-阿克曼四轮小车计算方法

四轮驱小车的话: 转向角度计算方法:float turning_angle z_angular / x_linear; // 转向角度,单位为弧度 速度的话直接用线速度 两轮驱动小车: 计算公式: leftSpeed x_linear - z_angular * ORIGINBOT_WHEEL_TRACK /…...

解释器模式

在软件开发的诸多场景中,我们有时需要处理特定领域的语言或表达式。例如,在数据库查询中,我们使用 SQL 语句来查询数据;在数学计算软件里,需要解析和计算各种数学表达式。解释器模式(Interpreter Pattern&a…...

代码随想录刷题day14(2)|(链表篇)02.07. 链表相交(疑点)

目录 一、链表理论基础 二、链表相交求解思路 三、相关算法题目 四、疑点 一、链表理论基础 代码随想录 二、链表相交求解思路 链表相交时,是结点的位置,也就是指针相同,不是结点的数值相同; 思路:定义两个指针…...

戴尔电脑用u盘重装系统_戴尔电脑用u盘重装win10系统教程

戴尔电脑用u盘重装系统?戴尔电脑这几年默认预装win10家庭版和win11家庭版。有的用户用上了预装win11家庭版的戴尔电脑,使用一段时间依然不习惯,于是想退回win10。但不知道怎么重装win10,这几年的戴尔电脑建议采用U盘方式安装系统比…...

http的请求体各项解析

一、前言 做Java开发的人员都知道,其实我们很多时候不单单在写Java程序。做的各种各样的系统,不管是PC的 还是移动端的,还是为别的系统提供接口。其实都离不开http协议或者https 这些东西。Java作为编程语言,再做业务开发时&#…...

【MARK】Cline配合FreeAPI,再薅亿点点token

说明 自从用了cline,token消耗的速度就开始起飞。各家免费的几百万Token,看起来挺多,实际用起来还是顶不住几天~ FreeAPI是个简单的替代,上下文长度还是不如官方API,所以还是推荐使用官方,这个只是玩具&a…...

如何使用CRM数据分析优化销售和客户关系?

嘿,大家好!你有没有想过为什么有些公司在市场上如鱼得水,而另一些却在苦苦挣扎?答案可能就藏在他们的销售策略和客户关系管理(CRM)系统里。今天我们要聊的就是如何通过有效的 CRM 数据分析来提升你的销售额…...

c语言数组详解

前言 一、数组的定义: 二、数组的初始化: 1.如何给数组赋初值: 1.1逐个赋值: 1.2使用花括号初始化: 1.3使用等号赋值: 2.不同的初始化方式 2.1使用循环初始化: 2.2使用默认初始化: 三…...

EasyNVR免费版已发布!EasyNVR接入海康NVR大华NVR宇视NVR天地伟业NVR接入各种IPC摄像机工业监控家庭监控

EasyNVR不用多说了,驰名已久!之前一直是收费的,不管多少个摄像机接入都是收费的,这就导致,很多个人用户,或者说是家庭用户,家里就那么两三个摄像机,想通过EasyNVR接入NAS系统&#x…...

GSI快速收录服务:让你的网站内容“上架”谷歌

辛苦制作的内容无法被谷歌抓取和展示,导致访客无法找到你的网站,这是会让人丧失信心的事情。GSI快速收录服务就是为了解决这种问题而存在的。无论是新上线的页面,还是长期未被收录的内容,通过我们的技术支持,都能迅速被…...

vue2的$el.querySelector在vue3中怎么写

这个也属于直接操作 dom 了,不建议在项目中这样操作,不过我是在vue2升级vue3的时候遇到的,是以前同事写的代码,也没办法 先来看一下对比 在vue2中获取实例是直接通过 this.$refs.xxx 获取绑定属性 refxxx 的实例,并且…...

C++ list 容器用法

C list 容器用法 C 标准库提供了丰富的功能&#xff0c;其中 <list> 是一个非常重要的容器类&#xff0c;用于存储元素集合&#xff0c;支持双向迭代器。<list> 是 C 标准模板库&#xff08;STL&#xff09;中的一个序列容器&#xff0c;它允许在容器的任意位置快速…...

双目立体校正和Q矩阵

立体校正 对两个摄像机的图像平面重投影&#xff0c;使二者位于同一平面&#xff0c;而且左右图像的行对准。 Bouguet 该算法需要用到双目标定后外参(R&#xff0c;T) 从上图中可以看出&#xff0c;该算法主要分为两步&#xff1a; 使成像平面共面 这个办法很直观&#xff…...

又是一年啊

又是一年 回顾2024一、2024的愿望二、愿望实现了吗&#xff1f;三、总结 展望2025几个愿望~~&#xff08;终于快写完了&#xff09;~~ 华丽结尾 回顾2024 一、2024的愿望 1.CSP-J上岸&#xff1b; 2.小升初上岸&#xff1b; 3.数学进入联赛班&#xff1b; 4.初一期末年级前五…...

Spring Boot 邂逅Netty:构建高性能网络应用的奇妙之旅

一、引言 在当今数字化时代&#xff0c;构建高效、可靠的网络应用是开发者面临的重要挑战。Spring Boot 作为一款强大的 Java 开发框架&#xff0c;以其快速开发、简洁配置和丰富的生态支持&#xff0c;深受广大开发者喜爱。而 Netty 作为高性能、异步的网络通信框架&#xff…...

简识JVM私有内存区域栈、数据结构

前记&#xff1a;JVM稀有内存区域栈包含&#xff1a;虚拟机栈、本地方法栈、程序计数器&#xff1b; 在JVM&#xff08;Java虚拟机&#xff09;中&#xff0c;私有内存区域栈主要指的是虚拟机栈&#xff08;VM Stack&#xff09;和本地方法栈&#xff08;Native Method Stack&…...

【C++基础】多线程并发场景下的同步方法

如果在多线程程序中对全局变量的访问没有进行适当的同步控制&#xff08;例如使用互斥锁、原子变量等&#xff09;&#xff0c;会导致多个线程同时访问和修改全局变量时发生竞态条件&#xff08;race condition&#xff09;。这种竞态条件可能会导致一系列不确定和严重的后果。…...

【优选算法】10----无重复字符的最长子串

---------------------------------------begin--------------------------------------- 题目解析&#xff1a; 看到这一类题目&#xff0c;有没有那种一眼就感觉时要用到滑动窗口的感觉&#xff0c;铁子们&#xff1f; 讲解算法原理&#xff1a; 方法一: 暴力解法&#xff…...

C语言程序设计十大排序—冒泡排序

文章目录 1.概念✅2.冒泡排序&#x1f388;3.代码实现✅3.1 直接写✨3.2 函数✨ 4.总结✅ 1.概念✅ 排序是数据处理的基本操作之一&#xff0c;每次算法竞赛都很多题目用到排序。排序算法是计算机科学中基础且常用的算法&#xff0c;排序后的数据更易于处理和查找。在计算机发展…...

26考研资料分享 百度网盘

基础班&#xff1a; 通过网盘分享的文件&#xff1a;2026【考研数学】等3个文件 链接:https://pan.baidu.com/s/1djzJiut1h0DH8WmrI05YHg?pwd1234 提取码:1234--来自百度网盘超级会员v3的分享 通过网盘分享的文件&#xff1a;01、2026【考研政治】 链接:https://pan.baidu.…...

C++ lambda表达式

目录 1.lambda表达式 1.1什么是Lambda表达式&#xff1f; 1.2Lambda表达式的语法 1.3捕捉列表 1.4函数对象与lambda表达式 1.lambda表达式 1.1什么是Lambda表达式&#xff1f; Lambda表达式是C11标准引入的一种匿名函数&#xff0c;它允许你在需要函数的地方直接编写代码…...

halo附件图片迁移到easyimage图床

前言 在使用 markdown 编写文章之后&#xff0c;markdown 内容中引用的图片都是图床的地址 部分文章是在 halo 没有使用图床前&#xff0c;就已经发布了的&#xff0c;这些图片都是直接存储在 halo 系统中的 需要将这些文章的图片全部迁移到图床上&#xff0c;这些文章的图片…...

Grafana

Grafana 是一款广泛使用的开源数据可视化与监控平台&#xff0c;通过与 Prometheus、InfluxDB、Elasticsearch 等多种数据源集成&#xff0c;提供强大的监控、数据展示和告警功能。其告警体系在及时通知系统异常、保障业务稳定性方面起到关键作用。 Grafana 告警体系概述 Graf…...

前端性能优化:HMR热更新和预获取加载

最近发现项目开发&#xff0c;有点加载快&#xff0c;有点却是卡机式&#xff0c;甚至刷新导致白屏情况。于是&#xff0c;我找开发和性能优化的方法&#xff0c;找到下面几种。 本文将深入探讨 预获取&#xff08;Prefetch&#xff09;、动态导入&#xff08;Dynamic Import&…...

OpenCV相机标定与3D重建(66)对立体匹配生成的视差图(disparity map)进行验证的函数validateDisparity()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 使用左右检查来验证视差。矩阵 “cost” 应该由立体对应算法计算。 cv::validateDisparity 函数是 OpenCV 库中用于对立体匹配生成的视差图&…...

git reset (取消暂存,保留工作区修改)

出现这种情况的背景&#xff1a;我不小心把node_modules文件添加到暂存区了&#xff0c;由于文件过大&#xff0c;导致不能提交&#xff0c;所以我想恢复之前的状态&#xff0c;但又不想把修改的代码恢复为之前的状态&#xff0c;所以使用这个命令可以只恢复暂存区的状态&#…...