深入解析JavaScript变量作用域:var、let、const全攻略
在JavaScript中,变量作用域是一个核心概念,它决定了变量的可访问性和生命周期。理解变量作用域对于编写清晰、高效且无错误的代码至关重要。本文将深入探讨JavaScript中不同类型的变量声明方式(
var
、let
、const
等),分析它们的作用域特点,并结合实际代码示例进行详细讲解。此外,我们还将探讨变量作用域在实际开发中的应用,以及如何利用这些特性优化代码结构。
目录
一、var:函数作用域与提升
1. 函数作用域示例
2. 变量提升(Hoisting)
3. var的缺点
二、let和const:块级作用域与现代JavaScript
1. 块级作用域示例
2. let和const的提升
3. let和const的区别
4. 为什么使用let和const?
三、var、let和const的底层实现
1. 作用域链
2. 词法环境
四、变量作用域的实际应用
1. 避免全局变量污染
2. 提高代码可读性
3. 性能优化
五、其他变量声明方式
1. class声明
2. function声明
六、总结
一、var
:函数作用域与提升
var
是JavaScript早期版本中用于声明变量的关键字。它具有函数作用域(function scope),这意味着使用var
声明的变量在整个函数内部都是可访问的,而不仅仅局限于声明它的代码块。
1. 函数作用域示例
function testVar() {if (true) {var value = 3; // 在if语句块内声明}console.log(value); // 输出3,因为value具有函数作用域
}
testVar(); // 输出:3
分析:
- 在
testVar
函数中,var value = 3
被声明在if
语句块内,但由于var
具有函数作用域,value
在整个函数内部都是可访问的。 - 因此,即使
value
是在if
语句块内声明的,它仍然可以在if
语句块之外被访问。
2. 变量提升(Hoisting)
var
声明的另一个特性是变量提升。变量提升是指变量声明会被提升到函数或全局作用域的顶部,但初始化操作(赋值)不会被提升。
console.log(value); // 输出undefined,而不是报错
var value = 3;
console.log(value); // 输出3
分析:
- 在代码执行之前,
var value
会被提升到全局作用域的顶部,但赋值操作value = 3
不会被提升。 - 因此,当
console.log(value)
首次执行时,value
已经被声明,但尚未初始化,其值为undefined
。 - 在
var value = 3
执行后,value
被赋值为3
,后续的console.log(value)
输出3
。
3. var
的缺点
虽然var
在早期的JavaScript中被广泛使用,但它存在一些缺点:
作用域不明确:var
的函数作用域可能导致变量在意外的范围内被访问,容易引发错误。
变量提升可能导致意外行为:变量提升可能导致在声明之前访问变量,从而引入undefined
值,增加调试难度。
二、let
和const
:块级作用域与现代JavaScript
随着ECMAScript 2015(ES6)的引入,let
和const
成为了新的变量声明方式。它们具有块级作用域(block scope),这意味着变量的作用域仅限于它们被声明的代码块(如if
语句块、for
循环块等)。
1. 块级作用域示例
function testLet() {if (true) {let value = 4; // 在if语句块内声明}console.log(value); // 报错:value is not defined
}
testLet();
分析:
- 在
testLet
函数中,let value = 4
被声明在if
语句块内。由于let
具有块级作用域,value
仅在if
语句块内有效。 - 在
if
语句块之外,value
是不可访问的,因此console.log(value)
会抛出ReferenceError
错误。
2. let
和const
的提升
与var
类似,let
和const
声明的变量也会被提升,但它们的行为略有不同。let
和const
声明的变量会被提升到块的顶部,但它们会进入一个“暂时性死区”(Temporal Dead Zone, TDZ),直到它们被初始化。
-
console.log(value); // 报错:Cannot access 'value' before initialization let value = 4; console.log(value); // 输出4
分析:
- 在代码执行之前,
let value
被提升到块的顶部,但进入TDZ。 - 在
let value = 4
执行之前,value
是不可访问的,因此console.log(value)
会抛出错误。 - 在
let value = 4
执行后,value
被初始化,后续的console.log(value)
输出4
。
3. let
和const
的区别
let
:
- 允许重新赋值。
- 适用于需要在运行时修改的变量。
let count = 1;
count = 2; // 合法
console.log(count); // 输出2
const
:
- 不允许重新赋值。
- 适用于不需要修改的常量。
const PI = 3.14;
PI = 3.14159; // 报错:Assignment to constant variable
console.log(PI); // 输出3.14
4. 为什么使用let
和const
?
-
避免作用域污染:
let
和const
的块级作用域可以减少变量在意外范围内的访问,降低错误风险。 -
提高代码可读性:明确变量的作用域范围,使代码更易于理解和维护。
-
性能优化:
const
声明的变量在运行时不会被重新赋值,这有助于优化代码性能。
三、var
、let
和const
的底层实现
在JavaScript引擎的实现中,变量的作用域和生命周期是由作用域链(scope chain)和词法环境(lexical environment)管理的。
1. 作用域链
作用域链是一个链表结构,用于存储变量的引用。当访问一个变量时,JavaScript引擎会沿着作用域链逐级查找,直到找到该变量或到达全局作用域。
var
的作用域链:
var
声明的变量会被存储在函数或全局作用域中,它们的作用域链较短,通常只涉及函数或全局环境。- 这种设计使得
var
声明的变量在整个函数或全局范围内都可访问。
let
和const
的作用域链:
let
和const
声明的变量会被存储在块级作用域中,它们的作用域链更复杂,可能涉及多个嵌套的块。- 这种设计使得
let
和const
声明的变量仅在声明它们的块内有效。
2. 词法环境
词法环境是JavaScript引擎在解析代码时创建的一个数据结构,用于存储变量和函数的声明。每个词法环境都有一个指向其父词法环境的引用,形成了一个嵌套的结构。
var
的词法环境:
var
声明的变量会被存储在函数或全局词法环境中,它们的作用域与函数或全局环境一致。- 这种设计使得
var
声明的变量在整个函数或全局范围内都可访问。
let
和const
的词法环境:
let
和const
声明的变量会被存储在块级词法环境中,它们的作用域仅限于声明它们的块。- 这种设计使得
let
和const
声明的变量仅在声明它们的块内有效。
四、变量作用域的实际应用
变量作用域在实际开发中具有重要的应用价值。合理利用变量作用域可以提高代码的可读性、可维护性和性能。
1. 避免全局变量污染
全局变量可能会导致命名冲突和意外的副作用。通过使用let
和const
的块级作用域,可以将变量的作用范围限制在局部,避免全局变量污染。
function calculateSum() {let sum = 0; // 块级作用域for (let i = 0; i < 10; i++) {sum += i;}return sum;
}
console.log(calculateSum()); // 输出45
console.log(i); // 报错:i is not defined
分析:
- 在
calculateSum
函数中,let sum
和let i
被声明在块级作用域内,它们仅在函数内部有效。 - 在函数外部,
i
是不可访问的,避免了全局变量污染。
2. 提高代码可读性
明确的变量作用域可以提高代码的可读性,使其他开发者更容易理解代码的逻辑。
function processUsers(users) {for (const user of users) {const userId = user.id;console.log(`Processing user: ${userId}`);}
}
processUsers([{ id: 1 }, { id: 2 }]); // 输出:Processing user: 1 和 Processing user: 2
分析:
- 在
processUsers
函数中,const user
和const userId
被声明在块级作用域内,它们的作用范围仅限于for...of
循环。 - 使用
const
声明的变量在运行时不会被重新赋值,这有助于优化代码性能。
3. 性能优化
const
声明的变量在运行时不会被重新赋值,这有助于优化代码性能。JavaScript引擎可以对const
变量进行优化,减少不必要的内存分配。
const MAX_VALUE = 100;
function checkValue(value) {if (value > MAX_VALUE) {console.log("Value exceeds maximum limit");}
}
checkValue(150); // 输出:Value exceeds maximum limit
分析:
- 在
checkValue
函数中,const MAX_VALUE
被声明为一个常量,它在运行时不会被重新赋值。 - JavaScript引擎可以对
const MAX_VALUE
进行优化,减少不必要的内存分配。
五、其他变量声明方式
除了var
、let
和const
,JavaScript还提供了一些其他变量声明方式,如class
和function
。这些声明方式也有其独特的作用域规则。
1. class
声明
class
声明用于定义类,它具有块级作用域。类的作用域仅限于声明它的代码块。
{class User {constructor(name) {this.name = name;}}const user = new User("Alice");console.log(user.name); // 输出Alice
}
new User("Bob"); // 报错:User is not defined
分析:
- 在代码块中,
class User
被声明为一个类,它仅在代码块内有效。 - 在代码块外部,
User
是不可访问的,因此new User("Bob")
会抛出错误。
2. function
声明
function
声明用于定义函数,它具有函数作用域。函数的作用域仅限于声明它的代码块。
function outerFunction() {function innerFunction() {console.log("Inner function called");}innerFunction(); // 输出:Inner function called
}
outerFunction();
innerFunction(); // 报错:innerFunction is not defined
分析:
- 在
outerFunction
函数中,function innerFunction
被声明为一个内部函数,它仅在outerFunction
函数内有效。 - 在
outerFunction
函数外部,innerFunction
是不可访问的,因此innerFunction()
会抛出错误。
六、总结
变量作用域是JavaScript编程中的一个核心概念,它决定了变量的可访问性和生命周期。var
、let
和const
是JavaScript中主要的变量声明方式,它们具有不同的作用域规则和特性。
var
:
- 具有函数作用域。
- 变量会被提升到函数或全局作用域的顶部。
- 容易导致作用域污染和意外行为。
let
和const
:
- 具有块级作用域。
- 变量会被提升到块的顶部,但进入暂时性死区。
let
允许重新赋值,适用于需要在运行时修改的变量。const
不允许重新赋值,适用于不需要修改的常量。
在实际开发中,合理利用变量作用域可以提高代码的可读性、可维护性和性能。建议在现代JavaScript开发中优先使用let
和const
,避免使用var
。同时,了解class
和function
等其他变量声明方式的作用域规则,可以进一步优化代码结构。通过深入理解变量作用域的原理和应用,我们可以编写出更加高效、安全且易于维护的JavaScript代码。
相关文章:
深入解析JavaScript变量作用域:var、let、const全攻略
在JavaScript中,变量作用域是一个核心概念,它决定了变量的可访问性和生命周期。理解变量作用域对于编写清晰、高效且无错误的代码至关重要。本文将深入探讨JavaScript中不同类型的变量声明方式(var、let、const等),分析…...
C33-函数嵌套及编码实战
我们以一个编程题目的实践来学习此部分内容 题目:输入四个数,以函数的方式找出最大值 思维:使用两个数找出较大值→较大值与第三个数比较得出新的较大值→新的较大值与第四个数比较得出最大值 代码 #include <stdio.h>//内层函数的封装int GetMaxFromTwoNums(int a,int…...
clangd与clang-tidy
Clangd是基于Clang的Language Server,主要用于提供代码补全、跳转定义、错误提示等IDE功能。而Clang-Tidy则是静态代码分析工具,用于检查代码中的潜在问题,比如风格违规、潜在bug等。 clangd 核心工作原理 1. 基于编译器的精准解析 底层引擎…...
【Linux】冯诺依曼体系结构和操作系统的理解
目录 冯诺依曼体系结构一个例子来深入理解 初识操作系统操作系统的作用设计操作系统的目的操作系统之上和之下分别有啥 管理的精髓,先描述,再组织 冯诺依曼体系结构 我们知道,计算机这个东西发明出来就是帮助人们快速解决问题的。那如果我们想…...
Windows系统Jenkins企业级实战
目标 在Windows操作系统上使用Jenkins完成代码的自动拉取、编译、打包、发布工作。 实施 1.安装Java开发工具包(JDK) Jenkins是基于Java的应用程序,因此需要先安装JDK。可以从Oracle官网或OpenJDK下载适合的JDK版本。推荐java17版本&#x…...
服务预热原理
Java、Spring、Springboot工程启动后,第一次访问比较慢,而从第二次访问开始就快很多,这通常是由以下几个原因导致的: 类加载与初始化开销 类加载过程:Java程序在启动时需要加载大量的类文件到内存中,包括…...
Python核心编程深度解析:作用域、递归与匿名函数的工程实践
引言 Python作为现代编程语言的代表,其作用域管理、递归算法和匿名函数机制是构建高质量代码的核心要素。本文基于Python 3.11环境,结合工业级开发实践,深入探讨变量作用域的内在逻辑、递归算法的优化策略以及匿名函数的高效应用,…...
python环境搭建和pycharm的安装配置以及使用face_recognition与cv2
一.python环境的搭建: 1.下载python(这里以python3.11为例) step 1:打开下载网址:https://www.python.org/downloads/windows/ step 2:我这里选着python3.11.9的版本 2. 安装我就不说了,网上很多 二.pycharm的安装…...
养生:为健康生活筑牢根基
养生并非遥不可及的目标,而是贯穿于日常生活的点滴之中。从饮食、运动到心态调节,每一个环节都对我们的健康有着重要意义。以下为你详细介绍养生的实用策略,助力你开启健康生活模式。 饮食养生:科学搭配,滋养生命 合…...
linux-----------Ext系列⽂件系统(上)
1.理解硬盘 1-1 磁盘、服务器、机柜、机房 机械磁盘是计算机中唯⼀的⼀个机械设备 磁盘--- 外设 慢 容量⼤,价格便宜 1-2 磁盘物理结构 1-3 磁盘的存储结构 扇区:是磁盘存储数据的基本单位,512字节,块设备 如何定位⼀个扇区呢…...
ts装饰器
TypeScript 装饰器是一种特殊类型的声明,能够被附加到类声明、方法、访问符、属性或参数上。它本质上是一个函数,会在运行时被调用,并且被装饰的声明信息会作为参数传递给装饰器函数。 装饰器的分类 类装饰器 类装饰器作用于类构造函数&…...
未来通信中的大型人工智能模型:基础、应用与挑战的全面综述
题目:A Comprehensive Survey of Large AI Models for Future Communications: Foundations, Applications and Challenges 作者:江沸菠,潘存华,董莉,王可之,Merouane Debbah,Dusit Niyato&…...
青藏高原七大河流源区径流深、蒸散发数据集(TPRED)
时间分辨率 月空间分辨率 1km - 10km共享方式 开放获取数据大小 83.27 MB数据时间范围 1998-07-01 — 2017-12-31元数据更新时间 2024-07-22 数据集摘要 通过构建耦合积雪、冻土、冰川等冰冻圈水文物理过程的WEB-DHM模型(Water and Energy Budget-based Distribute…...
5.2 参数管理
目标 访问参数,用于调试、诊断和可视化;参数初始化;在不同模型组件间共享参数。 模型:单隐藏层的MLP import torch from torch import nnnet nn.Sequential(nn.Linear(4, 8), nn.ReLU(), nn.Linear(8, 1)) X torch.rand(size…...
Best Video下载器——抖音视频去水印工具
在浏览抖音时,我们常常会遇到一些精彩的短视频,想要保存下来作为创作素材或与朋友分享。然而直接下载的视频往往带有平台水印,影响观看体验。今天就为大家介绍几种简单实用的去水印方法,让你轻松获取高清无水印视频。 目前市面上…...
C语言_程序的段
在 C 语言程序中,内存通常被分为多个逻辑段,每个段存储不同类型的数据。理解这些段的结构和功能,有助于你更高效地编写、调试和优化程序。以下是 C 语言程序中主要的内存段及其特点: 1. 代码段(Text Segment) 存储内容:编译后的机器指令(程序代码)。特性: 只读:防止…...
Google Earth Pro(谷歌地球)2025大陆版安装教程
软件介绍 【名称】:Google Earth Pro(谷歌地球)2025 【大小】:63.6M 【语言】:简体中文 【安装环境】:Win/Win8/Winxp/Win10/Win11 谷歌地球(Google Earth) 是由Google公司开发的地图软件。谷歌地球采用了…...
2025年数维杯赛题C题专家 组委会C题专家疑集锦
1、段前段后距,行间距有要求嘛 C题专家:一般是单倍行距 2、请问参考文献和附录上方也要有图示页眉吗?ai使用报告放在附录里还是附录之后? C题专家:附录 3、第三问的那个三天都在一个城市可以吗?这样我们列两份城市的清明自由行,还是说…...
C.循环函数基础
循环函数基础 1. 循环函数基础1.1 循环的定义与作用1.1.1 `for` 循环语法示例1.1.2 `while` 循环语法示例1.1.3 `do-while` 循环语法示例1.1.4 循环的比较1.1.5 循环的应用场景2.1 for 循环语法结构执行流程示例应用场景优点缺点2.2 while 循环语法结构执行流程示例应用场景优点…...
spark-Join Key 的基数/rand函数
在数据处理中,Join Key 的基数 是指 Join Key 的唯一值的数量(也称为 Distinct Key Count)。它表示某个字段(即 Join Key)在数据集中有多少个不同的值。 1. Join Key 基数的意义 高基数:Join Key 的唯一值…...
【Oracle认证】MySQL 8.0 OCP 认证考试英文版(MySQL30 周年版)
文章目录 1、MySQL OCP考试介绍2、考试注册流程3、考试复习题库 Oracle 为庆祝 MySQL 30 周年,截止到2025.07.31 之前。所有人均可以免费考取原价245美元 (约1500)的MySQL OCP 认证。 1、MySQL OCP考试介绍 OCP考试 OCP认证是Oracle公司推…...
不同环境下运行脚本如何解决pythonpath问题
目录 问题背景: 方法一:在 Dockerfile 中设置 PYTHONPATH: 方法二: 本地脚本内动态地设置 sys.path,以确保 Python 程序在运行时能够找到项目中的模块 注意: 问题背景: 脚本在windows环境定义 然后因为…...
照片to谷歌地球/奥维地图使用指南
软件介绍 照片to谷歌地球/奥维地图是一款由WTSolutions开发的跨平台图片处理工具,能够将带有GPS信息的照片导入Google Earth(谷歌地球)或奥维地图。该软件支持Windows、Mac、iOS、Linux和Android系统,无需下载安装,直…...
visual studio 2015 安装闪退问题
参考链接: VS2012安装时启动界面一闪而过问题解决办法 visual studio 2015 安装闪退问题...
Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南
目录 Kubernetes 使用 containerd 实现 GPU 支持及 GPU Operator 部署指南 一、为什么 containerd 是趋势? 二、目标 三、前提条件 四、方式一:containerd nvidia-container-toolkit(基础方式) 1️⃣ 安装 NVIDIA Containe…...
【typenum】 1 说明文件(README.md)
Typenum Typenum 是一个用于在编译时计算类型级数字的 Rust 库。目前支持位、无符号整数和有符号整数。 Typenum 仅依赖 libcore,因此适用于任何平台! 导入方式 虽然 typenum 分为多个模块,但它们都通过 crate 根目录重新导出,…...
Axure疑难杂症:统计分析页面引入Echarts示例动态效果
亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! Axure产品经理精品视频课已登录CSDN可点击学习https://edu.csdn.net/course/detail/40420 课程主题:统计分析页面引入Echarts示例动态效果 主要内容:echart示例引入、大小调整、数据导入 应用场景:统计分析页面…...
PyQt5基本窗口控件(QWidget)
QWidget 基础窗口控件QWidget类是所有用户界面对象的基类,所有的窗口和控件都直 接或间接继承自QWidget类。 窗口控件(Widget,简称“控件”)是在PyQt中建立界面的主要元素。在PyQt 中把没有嵌入到其他控件中的控件称为窗口&…...
双目视觉系统中,极线校正(Epipolar Rectification)与单应性矩阵/多平面单应性模型
在双目视觉系统中,极线校正(Epipolar Rectification)的目标是使左右图像的对应点位于同一水平线上,从而简化立体匹配的搜索过程。标准的双目相机标定和校正流程,其核心原理与单应性矩阵的应用方式如下: 1. …...
【部署】win10的wsl环境下调试dify的api后端服务
回到目录 标题:win10的wsl环境下,远程调试dify的api后端服务 0. 上一篇讲解web前端服务的启动方法,本篇内容是vscode的调试模式启动api后端服务。文章4000字左右,阅读时间15-20分钟。 dify官方运行环境要求较低2U4G,…...
学习黑客了解Python3的“HTTPServer“
5 分钟深入浅出理解Python3的"HTTPServer"模块 🌐 大家好!今天我们将探索Python3中的HTTPServer模块——一个简单却强大的工具,它允许你快速创建web服务器。在网络安全学习、渗透测试和CTF挑战中,这个模块常被用来搭建…...
结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘
📊 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘 文章目录 📊 结合 ECharts / Ant Design Blazor 构建高性能实时仪表盘一、前言 🔍二、技术选型 🧰三、项目配置与架构 🏗️🌐 系统整体架构流程…...
刘强东杀入自动驾驶!京东注册“Joyrobotaxi”商标
又一个互联网大佬杀入汽车赛道!这一次,是京东的刘强东。5月6日,京东集团旗下公司一口气申请注册了多个名为"Joyrobotaxi"的商标,国际分类涵盖运输工具、科学仪器等核心领域。这一动作被业界普遍解读为:京东要…...
JavaScript基础-switch分支流程控制
在JavaScript编程中,switch语句提供了一种清晰、简洁的方式来实现多路分支选择。相比于多个if...else if语句,switch语句可以使代码更加易读和易于维护,尤其是在需要根据单个变量或表达式的值进行不同路径选择时尤为有用。本文将详细介绍swit…...
MySQL:视图
目录 一、什么是视图 二、视图的创建和使用 三、修改数据 (1)修改真实表 (2)修改视图 四、删除视图 五、视图的优点 一、什么是视图 视图是一个虚拟的表,它是基于一个或多个基本表或其他视图的查询结果集。视…...
05 mysql之DDL
一、SQL的四个分类 我们通常可以将 SQL 分为四类,分别是: DDL(数据定义语言)、DML(数据操作语言)、 DCL(数据控制语言)和 TCL(事务控制语言)。 DDL 用于创建…...
各国GDP变化趋势网页特效(实用动态图表)完整实例
https://download.csdn.net/download/YUJIANYUE/90803109...
【部署】win10的wsl环境下启动dify的web前端服务
回到目录 标题:win10的wsl环境下启动dify的web前端服务 0. 官网安装指引 官网有详细的源代码部署说明,参考: https://docs.dify.ai/en/getting-started/install-self-hosted/local-source-code 1. 安装nodejs 1.1. 下载和解压文件 参考:https://no…...
Veins同时打开SUMO和OMNeT++的GUI界面
进入 Veins 工程目录(即包含 sumo-launchd.py 的目录),打开终端设置 SUMO_HOME 环境变量(指向你安装的 SUMO 路径): export SUMO\_HOME/home/veins/src/sumo-1.11.0编译 Veins 工程(包含 OMNeT…...
模型 启动效应
系列文章分享模型,了解更多👉 模型_思维模型目录。刺激先行激活,后续认知更顺畅。 1 启动效应的应用 1.1 求职面试中对面试官的影响 背景:一家知名公司在招聘过程中发现,面试官对候选人的评价往往受到多种因素的影响…...
Android 使用Paging3 实现列表分页加载、下拉刷新、错误重试、筛选功能
Android 使用Paging3 实现列表加载 Paging3是Android Jetpack组件库中的分页加载库,它可以帮助开发者轻松实现列表数据的分页加载功能。本文将逐步讲解如何使用Paging3库实现一个带有加载更多、下拉刷新、错误重试、筛选功能的列表页面。 最终效果如下 加载更多、…...
SpringBoot2集成xxl-job详解
官方教程 搭建调度中心 Github Gitee 注:版本3.x开始要求Jdk17;版本2.x及以下支持Jdk1.8。如对Jdk版本有诉求,可选择接入不同版本 clone源代码执行xxl-job\doc\db\tables_xxl_job.sql # # XXL-JOB v2.4.1 # Copyright (c) 2015-present, x…...
洛图报告中的 FSHD 是什么?—— 解密九天画芯推动的三色光源显示技术
目录 一、洛图报告新焦点:FSHD 为何成为显示产业重要突破方向? (一)洛图报告核心结论:从技术突围到产业重构 二、技术解析:FSHD 如何重构显示底层逻辑? (一)物理架构…...
关于数据库查询速度优化
本人接手了一个关于项目没有任何文档信息的代码,代码也没有相关文档说明信息!所以在做数据库查询优化的时候不敢改动。 原因1: 老板需要我做一个首页的统计查询。明明才几十万条数据,而且我加了筛选条件为什么会这么慢ÿ…...
两数相加(2)
2. 两数相加 - 力扣(LeetCode) 解法: class Solution { public:ListNode* addTwoNumbers(ListNode* l1, ListNode* l2) {ListNode * dummy new ListNode(0);int carry 0;ListNode * head dummy;while (l1 ! nullptr || l2 ! nullptr ||…...
车载学习(6)——CAPL(1)一些基础知识
1.一些CAPL的知识 CAPL通讯访问编程语言(Commmunication Access Programming language) CAPL的用途 ECU的仿真实现(报文的收发、数据的处理)实现总线日志纪录的控制实现总线数据自动化分析实现ECU功能的自动化测试实现ECU报文发…...
C++笔记-set和map的使用(包含multiset和multimap的讲解)
1.序列式容器和关联式容器 前面我们已经接触过STL中的部分容器如:string、vector、list、deque、array、forward_list等,这些容器统称为序列式容器,因为逻辑结构为线性序列的数据结构,两个位置存储的值之间一般没有紧密的关联关系࿰…...
GLPK(GNU线性规划工具包)介绍
GLPK全称为GNU Linear Programming Kit(GNU线性规划工具包),可从 https://sourceforge.net/projects/winglpk/ 下载源码及二进制库,最新版本为4.65。也可从 https://ftp.gnu.org/gnu/glpk/ 下载,仅包含源码,最新版本为5.0。 GLPK是…...
技嘉主板BIOS升级
截图可能不同的BIOS长的不一样,但大概相同,BIOS不下错,逐个版本升级就没问题 准备工作 准备工作一个fat32格式的U盘,用来存放BIOS确认主板型号 和当前BIOS版本 方式1:去系统信息里面 方式2: 去BIOS设置…...
自定义类型:结构体进阶
一、结构体类型的声明 前⾯我们在学习操作符和初阶结构体的时候,已经学习了结构体的知识,这⾥稍微复习⼀下。 1.1结构体的回顾 结构是⼀些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2结构的声明 struct tag…...