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

JavaScript变量的作用域介绍

JavaScript变量的作用域介绍

JavaScript 变量的作用域决定了变量在代码中的可访问性。

var 是 JavaScript 中最早用于声明变量的关键字,它函数作用域或全局作用域。

let 关键字,具有块级作用域、全局作用域。

const关键字,具有块级作用域、全局作用域。

var、let 和 const 关键字对比表

特性

var

let

const

作用域

函数作用域或全局作用域

块级作用域、全局作用域

块级作用域、全局作用域

变量提升

提升到作用域顶部,初始化为 undefined

声明前访问会报错,因存在“暂时性死区”(Temporal Dead Zone)

声明前访问会报错,因存在“暂时性死区”(Temporal Dead Zone)

重复声明

合法,后续声明覆盖前一个值

不合法,抛出 SyntaxError

不合法,抛出 SyntaxError

是否可变

可变

可变

不可变(引用不可变,但内容可变)【注】

是否成为全局对象属性

是(在全局上下文中)

【注:const 声明的变量不可重新赋值,但若为对象/数组,其内容可修改。示例:
const arr = [1, 2];
arr.push(3); // 允许
arr = [4, 5]; // 报错 】

下面展开介绍

1. 作用域类型

全局作用域(Global Scope

  • 定义:在函数外声明的变量。
  • 特点
    • 任何地方都可访问,包括函数内部。过度使用全局变量可能导致命名冲突和代码难以维护。
    • 在浏览器环境中,全局变量通常与 window 对象关联。
    • 浏览器环境中,var 声明的全局变量会成为 window 对象(在浏览器环境中)的属性,let 和 const 不会。
  • 注意

避免隐式全局变量,始终显式声明变量。

在非严格模式下,未使用 var、let 或 const 关键字声明的变量会被隐式提升为全局变量。

在严格模式下,未声明的变量会导致 ReferenceError,因此不会创建隐式全局变量。

var:在全局上下文中声明的变量会成为全局对象的属性,具有全局作用域。

let 和 const:在全局上下文中声明的变量是全局变量,但不会成为全局对象的属性; let 或 const 关键字还可以声明块级作用域(见后面)。

  • 全局变量的创建方式: 

1)隐式全局变量:

myGlobalVar = "Hello, World!"; // 隐式全局变量
console.log(myGlobalVar); // 输出 "Hello, World!"
console.log(window.myGlobalVar); // 输出 "Hello, World!",因为它是 window 的属性

2)显式全局变量:

使用window对象可以明确地创建全局变量。

window.myExplicitGlobalVar = "Hello, again!"; // 显式全局变量
console.log(window.myExplicitGlobalVar); // 输出 "Hello, again!"
console.log(myExplicitGlobalVar); // 输出 "Hello, again!",直接访问也可以。

3) 使用 var、let 或 const 关键字声明全局变量

//使用 var 声明全局变量
var globalVar = "Hello";
console.log(globalVar); // 输出: Hello
console.log(window.globalVar); // 输出: Hello,因为它是 window 对象的属性//使用 let 声明全局变量
let globalLetVar = "Hello";
console.log(globalLetVar); // 输出: Hello
console.log(window.globalLetVar); // 输出: undefined(不是 window 的属性)//使用 const 声明全局变量
const globalConstVar = "Hello";
console.log(globalConstVar); // 输出: Hello
console.log(window.globalConstVar); // 输出: undefined(不是 window 的属性)

注意,虽然全局变量在某些情况下是必要的,但为了防止命名冲突和提高代码质量,现代编程实践中通常不鼓励过度依赖全局变量。

函数作用域(Function Scope

  • 定义:在函数内部用var声明的变量和函数参数,作用范围为整个函数。
  • 特点
    • 在函数内任何位置(包括嵌套代码块)可访问。
  • 示例
function func() {if (true) {var innerVar = '内部变量'; // 属于函数作用域}console.log(innerVar); // '内部变量'(正常访问)
}
func();

 此例同时说明,var 声明的变量没有块级作用域,即使在块(如 if、for、while 等)中声明,变量仍然属于包含它的函数或全局作用域。

var 声明的变量会被提升(hoisting)到当前作用域的顶部,但赋值不会被提升。这意味着变量在声明之前可以访问,但值为 undefined。例如:

console.log(hoistedVar); // 输出: undefined
var hoistedVar = 'I am hoisted';

块级作用域(ES6+

  • 定义:由 {} 包围的代码块(如 if、for),使用 let 或 const 声明。
  • 特点
    • 变量仅在块内有效。
    • 避免循环变量泄露等问题。
  • 示例
if (true) {let blockVar = '块内变量';const PI = 3.14;
}
console.log(blockVar); // 报错:blockVar未定义

此例说明,let 和 const 不会被提升,存在“暂时性死区”(Temporal Dead Zone),即声明前访问会报错。

注意

    •      let 和 const 声明的变量仅在 声明它们的代码块内有效。

    •      如果在函数体的最外层(不嵌套在任何代码块中)声明,则作用域为 整个函数体(因为函数体本身是一个块级作用域)。

    •      如果在函数内的嵌套代码块中声明(如 if 内部),则作用域仅限该代码块。

var、let和const的区别

  • var
    • 具有函数作用域(在函数内部声明的变量只在函数内部有效)。
    • 如果在全局作用域中声明,则具有全局作用域。
    • 存在变量提升(hoisting),但未初始化的变量会返回undefined。
    • 可以重复声明同一个变量。
  • let和const
    • 具有块级作用域(在代码块内部声明的变量只在代码块内部有效)。
    • 不会被提升到块的顶部。
    • 不允许重复声明同一个变量。
    • let声明的变量可以重新赋值,而const声明的变量不能重新赋值(具有只读性,且必须在声明时立即赋值,否则报错))。

模块作用域(Module scope

模块作用域的定义

  • 定义:每个 ES6 模块(以 .mjs 扩展名或 <script type="module"> 标签引入)拥有独立的作用域,模块内声明的变量、函数、类等默认仅在模块内可见,不会污染全局作用域。
  • 核心规则
    • 模块内的顶级变量(var、let、const)不会自动成为全局对象的属性(如 window 或 global)。
    • 模块间需要通过 export 导出和 import 导入来共享变量或函数。

浏览器环境,需使用 <script type="module"> 标签加载模块。

<script type="module" src="app.mjs"></script>

模块作用域的特点

(1) 默认隔离性

// moduleA.mjs
let privateVar = "模块A的私有变量"; // 仅模块A可见
export const publicVar = "模块A的公开变量";

// moduleB.mjs
import { publicVar } from './moduleA.mjs';
console.log(publicVar); // "模块A的公开变量"
console.log(privateVar); // 报错:privateVar未定义

(2) 不会污染全局对象

// 模块内声明变量
var moduleVar = "模块变量";
console.log(window.moduleVar); // undefined(浏览器环境)

(3) 隐式严格模式

ES6 模块默认启用严格模式,无需显式添加 'use strict'。

// 以下代码在模块中直接报错,非模块脚本可能不会
undeclaredVar = 10; // 报错:未声明变量

2.作用域链与闭包

  • 作用域链(Scope Chain:函数在定义时确定作用域链,逐级向上查找变量。
  • 闭包(Closures:函数保留对外部作用域的引用,即使外部函数已执行完毕。
    • 内部函数可以访问外部函数的变量。
    • 外部函数执行完毕后,其作用域不会被销毁,而是被内部函数引用。

作用域链示例

let globalVar = "global";function outerFunction() {let outerVar = "outer";function innerFunction() {let innerVar = "inner";console.log(innerVar); // 输出: innerconsole.log(outerVar); // 输出: outerconsole.log(globalVar); // 输出: global}innerFunction();
}outerFunction();

当访问一个变量时,JavaScript会按照作用域链的顺序查找变量。作用域链是从当前作用域开始,逐级向上查找,直到全局作用域。

闭包示例

function outerFunction() {let outerVar = "I am outer";function innerFunction() {console.log(outerVar); // 访问外部变量}return innerFunction;
}let myClosure = outerFunction();
myClosure(); // 输出: I am outer

闭包是指函数可以访问其外部作用域的变量,即使外部函数已经执行完毕。

附1、严格模式(使用'use strict'

  • 在严格模式下,未声明的变量会导致ReferenceError,从而避免全局变量污染。
  • 严格模式是ES5引入的一种特殊的运行模式,使代码在更严格的条件下运行。
  • 通过在代码开头添加 "use strict" 声明来启用。
  • 可以应用于整个脚本或单个函数。

启用方式

// 整个脚本使用严格模式
"use strict";
// 后续代码...

// 或在函数内使用
function myFunction() {
    "use strict";
    // 函数代码...
}
 

示例:非严格模式和严格模式下未声明变量直接赋值的行为差异。

假设我们有以下代码片段:

function myFunction() {x = 10; // 未声明的变量 xconsole.log(x); // 输出 x 的值
}myFunction();
console.log(x); // 在全局作用域中访问 x

1)非严格模式下的行为
在非严格模式下,如果直接给未声明的变量赋值,JavaScript 会自动将该变量提升为全局变量。
function myFunction() {
    x = 10; // 未声明的变量x
    console.log(x); // 输出 10
}

myFunction();
console.log(x); // 输出 10
解释:
在myFunction函数中,变量x没有被声明(没有使用var、let或const),但直接赋值为10。
非严格模式下,JavaScript 会自动将x提升为全局变量。因此,x在函数内部和全局作用域中都可以被访问。
这种行为可能导致意外的全局变量污染。


2)严格模式下的行为
在严格模式下,未声明的变量直接赋值会抛出ReferenceError。
'use strict'; // 启用严格模式

function myFunction() {
    x = 10; // 未声明的变量 x,报错:未声明变量
    console.log(x); // 抛出 ReferenceError : x is not defined
}

myFunction();
console.log(x); // 这行代码不会被执行
解释:
在严格模式下,JavaScript 不允许直接给未声明的变量赋值。
如果尝试给未声明的变量赋值,JavaScript 会抛出ReferenceError,提示变量未定义。
这种行为可以防止意外创建全局变量,减少潜在的错误和命名冲突。
 

关于 JavaScript 严格模式的官方文档可见https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode

附2、可变(Mutable)和不可变(Immutable

“可变”(Mutable)和“不可变”(Immutable)是描述变量或数据是否可以被修改的术语。

1)可变(Mutable

如果一个变量或数据结构的内容可以被修改,那么它就是可变的。这意味着你可以直接改变变量的值或数据结构中的某些部分,而不会创建新的对象。

示例

// 可变的变量

let number = 10;

number = 20; // 修改变量的值,number 现在是 20

// 可变的对象

let obj = { name: "Alice" };

obj.name = "Bob"; // 修改对象的属性,obj 现在是 { name: "Bob" }

obj.age = 25; // 添加新的属性,obj 现在是 { name: "Bob", age: 25 }

在上面的例子中:

number 是一个可变的变量,因为它的值可以从 10 改为 20。

obj 是一个可变的对象,因为它的属性可以被修改或添加。

2)不可变(Immutable

如果一个变量或数据结构的内容不能被修改,那么它就是不可变的。这意味着一旦创建,它的值或内容就无法被改变。如果需要“修改”,通常会创建一个新的对象或变量。

示例

// 不可变的变量(使用 const 声明)

const PI = 3.14;

PI = 3.14159; // 抛出 TypeError: Assignment to constant variable.

在上面的例子中:

PI 是一个不可变的变量,因为它被 const 声明,不能被重新赋值。

不可变对象

虽然 JavaScript 中没有原生的不可变对象,但可以通过一些技术手段(如 Object.freeze())使对象的结构和属性不可变。

const obj = Object.freeze({ name: "Alice" });

obj.name = "Bob"; // 不会报错,但不会生效,obj 仍然是 { name: "Alice" }

obj.age = 25; // 不会报错,但不会生效,obj 仍然是 { name: "Alice" }

obj = {}; // 报错

在上面的例子中:

obj 是一个不可变的对象,因为通过 Object.freeze() 方法,它的属性无法被修改或添加。

3. 可变与不可变的区别

  • 可变数据
    • 可以直接修改。
    • 修改操作通常会影响原始数据。
    • 在某些情况下可能导致意外的副作用(如在函数中修改传入的对象)。
  • 不可变数据
    • 不能直接修改。
    • 修改操作会创建一个新的对象或数据结构。
    • 更安全,避免了意外修改导致的错误。
    • 常用于函数式编程,因为函数式编程强调“无副作用”的函数。

小结

  • 可变(Mutable:可以被修改。
  • 不可变(Immutable:不能被修改。
  • 在 JavaScript 中,let 声明的变量是可变的,而 const 声明的变量是不可变的(但对象或数组的内容可以被修改)。
  • 不可变性有助于提高代码的安全性和可维护性,尤其是在复杂的应用中。

相关文章:

JavaScript变量的作用域介绍

JavaScript变量的作用域介绍 JavaScript 变量的作用域决定了变量在代码中的可访问性。 var 是 JavaScript 中最早用于声明变量的关键字&#xff0c;它函数作用域或全局作用域。 let 关键字&#xff0c;具有块级作用域、全局作用域。 const关键字&#xff0c;具有块级作用域…...

ollama如何安全卸载,解决Ollama unins000.msg is missing

春节后在本地电脑安装了Ollama的客户端&#xff0c;每次开机自启&#xff0c;影响开机速度&#xff0c;而且本地的模型不如联网的回答效果好&#xff0c;果断选择了卸载&#xff0c;但是今天卸载发现提示下方的错误。根据此文章可以解决当前的问题。 根据此文章可以解决当前的…...

2.5GE 超千兆SFP光模块型号(常用光模块收发光功率范围)

SFP 2.5GE超千兆光模&#xff0c;参考表格&#xff1a; 型号类型工作波长 (nm)发光功率 (dBm)光功率灵敏度 (dBm)传输距离 (m)SFP-25G-SR多模光纤850-10.0 to -3.0-18.0300 (OM3) / 400 (OM4)SFP-25G-LR单模光纤1310-5.0 to 1.0-24.010,000SFP-25G-ER单模光纤1550-1.0 to 4.0…...

Ubuntu24.04安装不同版本的pip

目录 1.安装pip 2. 为不同的Python版本安装pip 3. 安装python库 1.安装pip 一般情况下&#xff0c;Ubuntu系统默认提供Python 3&#xff0c;但可能没有安装pip。可以通过以下命令安装pip sudo apt update sudo apt install python3-pip 安装完成后&#xff0c;可以通过以下…...

fastadmin实现海报批量生成、邮件批量发送

记录一个海报批量生成、邮件批量发送功能开发&#xff0c;业务场景如下&#xff1a; 国外客户做观展预登记&#xff0c;工作人员通过后台&#xff0c;批量给这些观众生成入场证件并发送到观众登记的邮箱&#xff0c;以方便观众入场时快速进场。证件信息包含入场二维码、姓名&a…...

拆解微软CEO纳德拉战略蓝图:AI、量子计算、游戏革命如何改写未来规则!

2025年2月19日 知名博主Dwarkesh Patel对话微软CEO萨蒂亚纳德拉 在最新访谈释放重磅信号&#xff1a;AI将掀起工业革命级增长&#xff0c;量子计算突破引爆材料科学革命&#xff0c;游戏引擎进化为世界模拟器。 整个视频梳理出几大核心观点&#xff0c;揭示科技巨头的未来十年…...

深度学习(2)-深度学习关键网络架构

关键网络架构 深度学习有4种类型的网络架构&#xff1a;密集连接网络、卷积神经网络、循环神经网络和Transformer。每种类型的模型都是针对特定的输入模式&#xff0c;网络架构包含了关于数据结构的假设&#xff0c;即模型搜索的假设空间。某种架构能否解决某个问题&#xff0…...

MyBatis中的日志和映射器说明

1.MyBatis中的日志 1.1 什么是日志 ​ 在我们编写应用的时候&#xff0c;有一些信息需要及时查看&#xff0c;查看的时候有时需要输出到控制台&#xff0c;有时需要输出到文件。MyBatis也需要日志&#xff0c;一般情况下&#xff0c;使用log4j进行日志管理。 1.2 在MyBatis中…...

pip下载速度变快可以用清华镜像源

pip下载速度变快可以用清华镜像源 https://pypi.tuna.tsinghua.edu.cn/simplepip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple参考清华镜像源地址&#xff08;国内下载python包必备地址&#xff09;_清华源镜像地址-CSDN博客...

骶骨神经

骶骨肿瘤手术后遗症是什么_39健康网_癌症 [健康之路]匠心仁术&#xff08;七&#xff09; 勇闯禁区 骶骨肿瘤切除术...

LeetCode刷题---二分查找---441

排列硬币 441. 排列硬币 - 力扣&#xff08;LeetCode&#xff09; 题目 你总共有 n 枚硬币&#xff0c;并计划将它们按阶梯状排列。对于一个由 k 行组成的阶梯&#xff0c;其第 i 行必须正好有 i 枚硬币。阶梯的最后一行 可能 是不完整的。 给你一个数字 n &#xff0c;计算…...

DeepSeek 提示词:定义、作用、分类与设计原则

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

最短路的方案数+打印路径

这个题目整合了我们最短路用到的很多技能 如何统计最短路径的方案数呢&#xff0c;这就需要我们另外开一个全局数组 如何打印路径呢&#xff0c;还是开一个全局的数组&#xff0c;记录前一个是啥就行 简单的来说&#xff0c;要增加啥新的功能&#xff0c;直接多开全局变量就行…...

Python爬虫系列教程之第十三篇:构建高可用爬虫系统 —— 混合架构与自动化监控

大家好&#xff0c;欢迎继续关注本系列爬虫教程&#xff01;随着爬虫项目规模的不断扩大和业务需求的提升&#xff0c;单一技术方案往往难以满足实际应用中对高可用性、稳定性和自动化监控的要求。如何构建一个既能应对多种反爬策略&#xff0c;又能在异常情况下自动恢复、实时…...

Python学习心得浅拷贝与深拷贝

一、变量的赋值、浅拷贝以及深拷贝的定义&#xff1a; 1.变量的赋值&#xff1a;只是形成两个变量&#xff0c;实际上还是指向同一个对象 2.浅拷贝&#xff1a;拷贝时&#xff0c;对象包含的子对象内容不拷贝&#xff0c;因此&#xff0c;源对象与拷贝对象会引用同一个子对象…...

cs106x-lecture13(Autumn 2017)-SPL实现

打卡cs106x(Autumn 2017)-lecture13 (以下皆使用SPL实现&#xff0c;非STL库&#xff0c;后续课程结束会使用STL实现) 1、v1v2p1p2 The following code C uses pointers and produces two lines of output. What is the output? int v1 10; int v2 25; int* p1 &v1…...

3D模型在线转换工具:轻松实现3DM转OBJ

3D模型在线转换是一款功能强大的在线工具&#xff0c;支持多种3D模型格式的在线预览和互转。无论是工业设计、建筑设计&#xff0c;还是数字艺术领域&#xff0c;这款工具都能满足您的需求。 3DM与OBJ格式简介 3DM格式&#xff1a;3DM是一种广泛应用于三维建模的文件格式&…...

AI IDE 新势力 Trae 功能深度解析:Builder与Chat模式的应用场景与市场竞争力分析

文章目录 一、前言二、简介2.1 Trae 的背景与定位 三、Trae 核心功能3.1 Builder模式介绍3.2 Chat模式介绍 四、Trae 实际应用案例4.1 Trae 安装与配置4.1.1 Trae 安装与配置4.1.2 Trae 设置 4.2 实战案例分享4.2.1 Trae Builder模式&#xff1a;从0到1生成对接 DeepSeek 的聊天…...

天 锐 蓝盾终端安全管理系统:办公U盘拷贝使用管控限制

天 锐 蓝盾终端安全管理系统以终端安全为基石&#xff0c;深度融合安全、管理与维护三大要素&#xff0c;通过对桌面终端系统的精准把控&#xff0c;助力企业用户构筑起更为安全、稳固且可靠的网络运行环境。它实现了管理的标准化&#xff0c;有效破解终端安全管理难题&#xf…...

ADCP处理软件CODAS安装 (conda方法安装)

夏威夷大学出品的ADCP处理软件&#xff0c;我主要用来查看船载ADCP流速数据。 1. 先安装conda(miniconda就可以)&#xff0c;这里不再赘述&#xff0c;安装完可以添加conda库和取消登录自动激活conda conda config --add channels conda-forge # 添加库 conda config --set a…...

JUC并发—9.并发安全集合三

大纲 1.并发安全的数组列表CopyOnWriteArrayList 2.并发安全的链表队列ConcurrentLinkedQueue 3.并发编程中的阻塞队列概述 4.JUC的各种阻塞队列介绍 5.LinkedBlockingQueue的具体实现原理 6.基于两个队列实现的集群同步机制 1.并发安全的数组列表CopyOnWriteArrayList …...

后端Java Stream数据流的使用=>代替for循环

API讲解 对比 示例代码对比 for循环遍历 package cn.ryanfan.platformback.service.impl;import cn.ryanfan.platformback.entity.Algorithm; import cn.ryanfan.platformback.entity.AlgorithmCategory; import cn.ryanfan.platformback.entity.DTO.AlgorithmInfoDTO; im…...

强化学习-GAE方法

2016-ICLR-HIGH-DIMENSIONAL CONTINUOUS CONTROL USING GENERALIZED ADVANTAGE ESTIMATION 解决问题 强化学习的目标为最大化策略的预期总回报&#xff0c;其中一个主要困难为 行为对reward的影响存在一个长时间的延迟&#xff08;credit assignment problem&#xff09;。价…...

51c大模型~合集71

我自己的原文哦~ https://blog.51cto.com/whaosoft/12260659 #大模型推理加速技术的学习路线 EfficientQAT 可以在 41 小时内在单个 A100-80GB GPU 上完成对 2-bit Llama-2-70B 模型的量化感知训练。与全精度模型相比&#xff0c;精度仅下降了不到 3%&#xff08;69.48 v…...

PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)

PyTorch-基础 环境准备 CUDA Toolkit安装&#xff08;核显跳过此步骤&#xff09; CUDA Toolkit是NVIDIA的开发工具&#xff0c;里面提供了各种工具、如编译器、调试器和库 首先通过NVIDIA控制面板查看本机显卡驱动对应的CUDA版本&#xff0c;如何去下载对应版本的Toolkit工…...

Linux(centos)系统安装部署MySQL8.0数据库(GLIBC版本)

安装前检查服务器glibc版本&#xff0c;下载对应版本包 rpm -qa | grep glibc mysql安装包及依赖包已整理好&#xff0c;下载地址&#xff1a;https://pan.quark.cn/s/3137acc814c0&#xff0c;下载即可安装 一、下载MySQL mysql安装包及依赖包已整理好&#xff0c;下载地址…...

Transformer解析——(四)Decoder

本系列已完结&#xff0c;全部文章地址为&#xff1a; Transformer解析——&#xff08;一&#xff09;概述-CSDN博客 Transformer解析——&#xff08;二&#xff09;Attention注意力机制-CSDN博客 Transformer解析——&#xff08;三&#xff09;Encoder-CSDN博客 Transforme…...

TypeScript 中 type 和 interface 深度对比分析

一、核心概念对比 特性interfacetype本质声明式类型契约&#xff08;面向对象范式&#xff09;类型别名&#xff08;函数式编程思维&#xff09;可扩展性支持声明合并&#xff08;多次声明自动合并&#xff09;不可合并基础类型支持只能描述对象/函数类型可描述任意类型&#…...

unplugin-vue-components,unplugin-auto-import,借用ai去学习

好的&#xff0c;我现在需要帮助用户理解他们提供的这段Vite配置代码。用户之前已经询问过关于ElementPlusResolver的导入问题&#xff0c;现在他们展示了在vite.config.ts中使用该解析器的具体配置。我需要逐步分析这段代码&#xff0c;并解释每个部分的作用。 首先&#xff…...

Nginx学习笔记:常用命令端口占用报错解决Nginx核心配置文件解读

Nginx 1. 基础命令1.1 重新加载systemd配置1.2 停止Nginx服务1.3 启动Nginx服务1.4 重启Nginx服务1.5 查看Nginx服务状态1.6 测试配置和重载Nginx 2. 额外命令2.1 启用开机自启2.2 禁用开机自启2.3 强制关闭所有Nginx进程 3. Nginx端口占用解决方案3.1 查找占用端口8090的进程3…...

C++ ——继承

体现的是代码复用的思想 1、子类继承父类&#xff0c;子类就拥有了父类的特性&#xff08;成员方法和成员属性&#xff09; 2、已存在的类被称为“基类”或者“父类”或者“超类”&#xff1b;新创建的类被称为“派生类”或者“子类” 注意&#xff1a; &#xff08;1&#…...

正则表达式常用记录

1. 定义 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;它是一种文本模式&#xff0c;同时也是计算机科学的一个概念&#xff0c;其中包括普通字符&#xff08;例如&#xff0c…...

redis的应用,缓存,分布式锁

1.应用 1.1可以用作缓存 作用&#xff1a;提交数据的查询效率&#xff0c;减少对数据库的访问频率 什么数据适合放入缓存 1.查询频率高&#xff0c;修改频率低 2.对安全系数比较低 如何实现 Service public class DeptServer {Autowiredprivate DeptMapper deptMapper;Auto…...

qt5实现表盘的旋转效果,通过提升QLabel类

因为工作需要&#xff0c;需要实现温度的表盘展示效果 实现思路&#xff1a; 通过提示声QLabel控价类&#xff0c;实现报盘的旋转和展示效果 1. 编写一个QLabel的类MyQLabel,实现两个方法 1. void paintEvent(QPaintEvent *event); //重绘函数 2. void valueChanged(int va…...

Flutter项目中设置安卓启动页

AndroidManifest.xml 设置 android:theme“style/LaunchTheme” <applicationandroid:label"string/app_name"android:name"${applicationName}"android:icon"mipmap/ic_launcher"android:roundIcon"mipmap/ic_launcher"android:t…...

人工智能之目标追踪DeepSort源码解读(yolov5目标检测,代价矩阵,余弦相似度,马氏距离,匹配与预测更新)

要想做好目标追踪,须做好目标检测,所以这里就是基于yolov5检测基础上进行DeepSort,叫它为Yolov5_DeepSort。整体思路是先检测再追踪,基于检测结果进行预测与匹配。 一.参数与演示 这里用到的是coco预训练人的数据集&#xff1a; 二.针对检测结果初始化track 对每一帧数据都输出…...

C语言之枚举类型

目录 前言 一、enum&#xff08;枚举 总结 前言 在C语言中&#xff0c;枚举类型是一种用户自定义的数据类型&#xff0c;用于定义一组具名的常量集合。枚举类型可以提高代码的可读性和可维护性&#xff0c;同时也能够帮助程序员避免使用魔法数字。通过枚举类型&#xff0c;我们…...

【Python爬虫(12)】正则表达式:Python爬虫的进阶利刃

【Python爬虫】专栏简介&#xff1a;本专栏是 Python 爬虫领域的集大成之作&#xff0c;共 100 章节。从 Python 基础语法、爬虫入门知识讲起&#xff0c;深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑&#xff0c;覆盖网页、图片、音频等各类数据爬取&#xff…...

推荐一款AI大模型托管平台-OpenWebUI

推荐一款AI大模型托管平台-OpenWebUI 1. OpenWebUI 1. OpenWebUI什么? 官网地址&#xff1a;https://openwebui.com/ GitHub地址&#xff1a; https://github.com/open-webui/open-webui Open WebUI 是一个可扩展、功能丰富且用户友好的自托管 AI 平台&#xff0c;旨在完全离…...

复习dddddddd

1. 思路&#xff1a;用队列先进先出的特性 #include <iostream> #include <vector> #include <stack> #include <cstdio> #include <algorithm> #include <cstring> #include <climits> #include <cstdlib> #include <cma…...

【3.5JavaScript】JavaScript字符串对象

文章目录 1.获取字符串长度2.大小写转换3.获取某一个字符4.截取字符串5.替换字符串6.分割字符串7.检索字符串位置8.例题&#xff1a;统计某一个字符的个数 在 JavaScript 中&#xff0c;对象是非常重要的知识点。对象分为两种&#xff1a;一种是 ”自定义对象“&#xff0c;另…...

消息队列-持续更新中

消息队列 0、消息队列官方参考文档 MQ官方参考文档 RocketMQ 官方文档&#xff1a; https://rocketmq.apache.org/docs/quick-start/ RocketMQ 中国开发者中心&#xff1a;http://rocketmq.cloud/zh-cn/ Kafka 官方文档&#xff1a; http://kafka.apache.org/documentation/ …...

创建一个简单的spring boot+vue前后端分离项目

一、环境准备 此次实验需要的环境&#xff1a; jdk、maven、nvm和node.js 开发工具&#xff1a;idea或者Spring Tool Suite 4&#xff0c;前端可使用HBuilder X&#xff0c;数据库Mysql 下面提供maven安装与配置步骤和nvm安装与配置步骤&#xff1a; 1、maven安装与配置 1…...

已知点矩阵的三个顶点坐标、行列数和行列的间距,计算得出剩余所有点的坐标

已知点矩阵的三个顶点坐标、行列数和行列的间距&#xff0c;计算得出剩余所有点的坐标 计算矩阵中每个点的坐标代码实现案例图调用验证 计算矩阵中每个点的坐标 给定左上角、左下角和右上角三个点的坐标&#xff0c;以及矩阵的行数、列数、行间距和列间距&#xff0c;我们可以…...

视频mp4垂直拼接 水平拼接

视频mp4垂直拼接 水平拼接 pinjie_v.py import imageio import numpy as np import os import cv2def pinjie_v(dir1,dir2,out_dir):os.makedirs(out_dir, exist_okTrue)# 获取目录下的所有视频文件video_files_1 [f for f in os.listdir(dir1) if f.endswith(.mp4)]video_fi…...

【记录54】渐变色 linear-gradient / radial-gradient

linear-gradient 线性渐变&#xff1a;是以直线条渐变 radial-gradient 径向渐变&#xff1a;是以图型形状渐变 <!-- 线性渐变&#xff08;从一个方向到另一个方向 --><div style" background: linear-gradient(to right, red, blue);"></div><…...

一周学会Flask3 Python Web开发-response响应格式

锋哥原创的Flask3 Python Web开发 Flask3视频教程&#xff1a; 2025版 Flask3 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili 在HTTP响应中&#xff0c;数据可以通过多种格式传输。大多数情况下&#xff0c;我们会使用HTML格式&#xff0c;这也是Flask中…...

二级公共基础之数据结构与算法篇(八)排序技术

目录 前言 一、交换类排序 1.冒泡排序法 1. 冒泡排序的思想 2. 冒泡排序的实现步骤 3. 示例 4. 冒泡排序的特点 2.快速排序 1. 快速排序的核心思想 2. 快速排序的实现步骤 3. 示例代码(C语言) 4. 快速排序的特点 二、插入类排序 1. 简单插入排序 1.简单插入排…...

以ChatGPT为例解析大模型背后的技术

目录 1、大模型分类 2、为什么自然语言处理可计算&#xff1f; 2.1、One-hot分类编码&#xff08;传统词表示方法&#xff09; 2.2、词向量 3、Transformer架构 3.1、何为注意力机制&#xff1f; 3.2、注意力机制在 Transformer 模型中有何意义&#xff1f; 3.3、位置编…...

Ubuntu 下 nginx-1.24.0 源码分析 - ngx_cpuinfo 函数

ngx_cpuinfo 声明在 src/core/ngx_core.h void ngx_cpuinfo(void); 定义在 src/core/ngx_cpuinfo.c 这里 ngx_cpuinfo 的定义可以找到 2 个 使用 gcc -E 处理一下来确认当下环境中使用的是哪一个 gcc -E src/core/ngx_cpuinfo.c \-I src/core \-I src/event \-I src/event/modu…...