JavaScript 中的 this 及 this 指向的改变方法
在 JavaScript 的世界里,this是一个既强大又容易让人困惑的概念。它的指向在不同的函数调用场景下会动态变化,而call()、apply()和bind()这三个方法则为我们提供了精确控制this指向的能力。本文将从基础概念出发,结合具体案例,带大家深入理解这些核心知识点。
一、JavaScript 中 this 的本质
1. 作为普通函数调用(独立调用)
当函数作为独立函数调用时(即没有任何对象前缀),this指向全局对象(浏览器环境为window,Node 环境为global)。在严格模式下("use strict"),this会被绑定为undefined。
function sayHello() {console.log(this); // 普通调用时指向window(非严格模式)
}
sayHello(); // window
2. 作为对象方法调用
当函数作为对象的方法被调用时(即通过对象。方法 () 的形式),this指向该对象本身:
const person = {name: 'Alice',greet: function() {console.log(`Hello, ${this.name}`); // 指向person对象}
};
person.greet(); // Hello, Alice
3. 作为构造函数调用
使用new关键字调用函数时,会创建一个新对象,此时this指向这个新创建的实例对象:
function Person(name) {this.name = name; // 指向新创建的实例
}
const alice = new Person('Alice');
console.log(alice.name); // Alice
4. 箭头函数中的 this
箭头函数不具备自身的this,它的this继承自外层作用域(词法作用域),且无法通过call()、apply()、bind()改变:
⑴.箭头函数的 this
继承外层作用域
箭头函数的 this
值在函数 定义时 就确定,继承自外层(词法作用域)的 this
,而非运行时的调用上下文。
测试代码 1:全局作用域
// 全局作用域(非严格模式)
const globalArrow = () => {console.log(this); // 输出:window(浏览器环境)或 global(Node.js)
};globalArrow();// 严格模式下
(function() {"use strict";const strictArrow = () => {console.log(this); // 输出:undefined(因为外层严格模式的 this 是 undefined)};strictArrow();
})();
测试代码 2:对象方法中的 this
const obj = {name: '普通函数',regularMethod: function() {console.log(this.name); // 输出:"普通函数"(this 指向 obj)},arrowMethod: () => {console.log(this.name); // 输出:undefined(或全局对象的 name,如果存在)}
};obj.regularMethod(); // 普通函数:this 指向 obj
obj.arrowMethod(); // 箭头函数:this 继承自外层(全局或严格模式下的 undefined)
⑵.无法通过 bind()
、call()
、apply()
改变 this
箭头函数的 this
是 固定 的,无法通过 bind
、call
、apply
改变。
测试代码 3:尝试绑定 this
const arrowFunc = () => {console.log(this); // 始终继承定义时的 this
};const obj = { name: '尝试绑定' };// 尝试绑定 this 到 obj
const boundFunc = arrowFunc.bind(obj);
boundFunc(); // 输出:全局对象(或 undefined,取决于定义时的外层 this)// 使用 call/apply 也无效
arrowFunc.call(obj); // 输出:全局对象
⑶.构造函数中的箭头函数
箭头函数 不能作为构造函数 使用,因为没有自己的 this
,且没有 prototype
。
测试代码 4:构造函数错误
// 错误示例:尝试用箭头函数作为构造函数
const Person = (name) => {this.name = name; // 报错!箭头函数没有 this
};new Person('Alice'); // 抛出错误:this is undefined
⑷.嵌套函数中的 this
传递
箭头函数的 this
继承自 外层最近的非箭头函数 的 this
。
测试代码 5:嵌套函数中的 this
function outer() {this.message = '外层函数';const innerRegular = function() {console.log(this.message); // 输出:undefined(因为 innerRegular 的 this 默认指向全局或严格模式下的 undefined)};const innerArrow = () => {console.log(this.message); // 输出:"外层函数"(继承 outer 的 this)};innerRegular(); // 普通函数:this 未绑定innerArrow(); // 箭头函数:this 继承自 outer
}outer();
二、改变 this 指向的三种方法
1. call () 方法 - 显式指定 this 并立即执行
call()
方法是 JavaScript 中函数对象的一个内置方法,它允许你调用一个函数,并指定这个函数内部 this
的值,同时还可以传递参数给这个函数。
语法
function.call(thisArg, arg1, arg2, ...)
函数名.call(此值指向对象, 参数1, 参数2, …)
- 函数名:调用
call
方法的函数。 - 此值指向对象:调用函数时,函数内部
this
关键字所指向的值。若该参数为null
或者undefined
,那么this
会指向全局对象(在浏览器环境里是window
对象)。 - 参数 1, 参数 2, …:属于可选参数,是传递给函数的参数列表。
案例
案例一:改变 this
的指向
const person = {name: 'Alice',greet: function() {console.log(`Hello, my name is ${this.name}.`);}
};const anotherPerson = {name: 'Bob'
};// 使用 call 方法改变 greet 函数的 this 指向
person.greet.call(anotherPerson);
在这个例子中,person
对象有一个 greet
方法,该方法使用 this.name
来输出信息。通过 call
方法,我们将 greet
方法内部的 this
指向了 anotherPerson
对象,所以输出的是 Bob
的名字。
案例二:传递参数
function add(a, b) {return a + b;
}// 使用 call 方法调用 add 函数并传递参数
const result = add.call(null, 3, 5);
console.log(result);
在这个例子中,add
函数是一个简单的加法函数。由于 add
函数不依赖于 this
,所以第一个参数可以传入 null
。然后我们通过 call
方法传递了两个参数 3
和 5
,最终得到结果 8
。
案例三:类数组对象使用数组方法
const arrayLike = {0: 'apple',1: 'banana',2: 'cherry',length: 3
};// 使用 call 方法让类数组对象使用数组的 forEach 方法
Array.prototype.forEach.call(arrayLike, function(item) {console.log(item);
});
在这个例子中,arrayLike
是一个类数组对象,它没有数组的方法。通过 call
方法,我们让 arrayLike
对象使用了数组的 forEach
方法,从而可以遍历它的元素。
2.apply () 方法
apply()
方法也是 JavaScript 中函数对象的一个内置方法,与 call()
方法类似,都可以用来调用函数并指定函数内部 this
的值,不同之处在于 apply()
方法接收参数的方式是一个数组或类数组对象。
语法
function.apply(thisArg, [argsArray])
参数解释:
function
:要调用apply
方法的函数。thisArg
:在调用函数时,this
关键字会指向这个值。如果该参数为null
或undefined
,在非严格模式下,this
会指向全局对象(在浏览器环境中是window
对象);在严格模式下,this
的值为null
或undefined
。argsArray
:一个包含要传递给函数的参数的数组或类数组对象。如果不需要传递参数,可以传入一个空数组[]
。
案例
案例一:改变 this
的指向
const person = {name: 'Alice',greet: function() {console.log(`Hello, my name is ${this.name}.`);}
};const anotherPerson = {name: 'Bob'
};// 使用 apply 方法改变 greet 函数的 this 指向
person.greet.apply(anotherPerson);
在这个例子中,person
对象有一个 greet
方法,通过 apply
方法将 greet
方法内部的 this
指向了 anotherPerson
对象,所以输出的是 Bob
的名字。
案例二:传递参数
function add(a, b) {return a + b;
}// 使用 apply 方法调用 add 函数并传递参数
const result = add.apply(null, [3, 5]);
console.log(result);
这里 add
函数是一个简单的加法函数,因为 add
函数不依赖于 this
,所以第一个参数传入 null
。通过 apply
方法传递了一个包含 3
和 5
的数组作为参数,最终得到结果 8
。
案例三:求数组中的最大值
const numbers = [5, 10, 3, 8, 15];// 使用 Math.max.apply 求数组中的最大值
const max = Math.max.apply(null, numbers);
console.log(max);
Math.max()
函数用于求多个数中的最大值,但它接收的是多个独立的参数,而不是一个数组。通过 apply
方法,将 numbers
数组作为参数传递给 Math.max()
函数,就可以求出数组中的最大值 15
。
3. bind () 方法
bind()方法会创建一个新函数,当这个新函数被调用时,this会被绑定为bind()方法的第一个参数。
语法
function.bind(thisArg, arg1, arg2, ...)
函数名.bind(此值指向对象, 参数1, 参数2, …)
参数解释
- 函数名:调用
bind
方法的原函数。 - 此值指向对象:在调用新创建的函数时,函数内部
this
关键字会指向该值。若传入null
或undefined
,在非严格模式下,this
指向全局对象(浏览器环境中是window
对象);严格模式下,this
就是null
或undefined
。 - 参数 1, 参数 2, …:可选参数,是在调用新创建的函数时预先传入的参数。
案例
案例一:改变 this
的指向
const person = {name: 'Alice',greet: function() {console.log(`Hello, my name is ${this.name}.`);}
};const anotherPerson = {name: 'Bob'
};// 使用 bind 方法创建一个新函数,改变 greet 函数的 this 指向
const newGreet = person.greet.bind(anotherPerson);
newGreet();
在这个例子里,person
对象有 greet
方法,借助 bind
方法创建了一个新函数 newGreet
,并把 greet
方法内部的 this
指向了 anotherPerson
对象,调用 newGreet
时输出的就是 Bob
的名字。
案例二:预先传入参数
function multiply(a, b) {return a * b;
}// 使用 bind 方法创建一个新函数,预先传入第一个参数
const double = multiply.bind(null, 2);
console.log(double(5));
这里的 multiply
函数用于计算两个数的乘积。通过 bind
方法创建了新函数 double
,预先传入参数 2
作为第一个参数。调用 double(5)
时,相当于调用 multiply(2, 5)
,最终结果是 10
。
案例三:在事件处理程序中使用
const button = document.createElement('button');
button.textContent = 'Click me';const obj = {message: 'Button clicked!',handleClick: function() {console.log(this.message);}
};// 使用 bind 方法确保 handleClick 中的 this 指向 obj
button.addEventListener('click', obj.handleClick.bind(obj));
document.body.appendChild(button);
在这个例子中,创建了一个按钮元素,obj
对象有 handleClick
方法。通过 bind
方法将 handleClick
方法的 this
指向 obj
,这样在点击按钮触发事件时,就能正确输出 Button clicked!
。
4.bind()
与 call()
、apply()
的区别
call()
和apply()
是直接调用函数,同时可以指定this
值和参数。bind()
并不直接调用函数,而是创建一个新的函数,这个新函数在被调用时,会使用指定的this
值和预先传入的参数。
相关文章:
JavaScript 中的 this 及 this 指向的改变方法
在 JavaScript 的世界里,this是一个既强大又容易让人困惑的概念。它的指向在不同的函数调用场景下会动态变化,而call()、apply()和bind()这三个方法则为我们提供了精确控制this指向的能力。本文将从基础概念出发,结合具体案例,带大…...
安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南
安卓模拟器绕过检测全解析:雷电、MuMu、蓝叠、逍遥、夜神与WSA完整指南 模拟器过检测合集雷电mumu蓝叠逍遥夜神WSA 转自风车2025 前言 随着手机游戏和应用的普及,越来越多的用户选择在PC上通过模拟器来运行安卓应用。然而,许多应用和游戏为…...
VSCode中安装GitGraph
前提是先安装git,官方下载地址:Git - Downloads 1. 在VSCode中安装GitGraph插件 2. 文件->首选项->设置,打开设置界面,在设置界面搜索git path 3. 打开配置文件配置git安装路径: 4. 打开源代码管理,…...
StartAI「万物迁移」功能设计师实操教程:模特换衣场景应用
一、功能核心优势解析 智能识别与场景融合 基于迁移学习算法,精准定位服装轮廓(支持复杂材质如蕾丝、镂空设计),自动匹配目标场景的光影方向与色温。 效率革命 传统PS手动换衣需2-3小时,使用万物迁移可压缩至2-5分…...
【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-放置标记
放置标记 文章目录 放置标记1、概述2、更新Globals.h3、放置标记4、渲染标记5、标记计数6、完整代码7、改进建议8、总结在本文中,我们实现标记放置和跟踪以完成的扫雷游戏项目。 1、概述 在我们扫雷游戏文章系列的最后部分中,我们将添加玩家在可疑的地雷位置放置标记的功能。…...
【Python】Selenium切换网页的标签页的写法(全!!!)
在使用selenium做网站爬取测试的时候,我们经常会遇到一些需要点击的元素,才能点击到我们想要进入的页面, 于是我们就要模拟 不断地 点点点击 鼠标的样子。 这个时候网页上就会有很多的标签页,你的浏览器网页标签栏 be like: 那…...
Spring Boot多环境配置详解
一、为什么需要多环境配置 在实际项目开发中,我们通常需要将应用部署到不同的环境中,比如: 开发环境(dev) - 开发人员本地开发调试使用测试环境(test) - 测试人员功能测试使用生产环境&#x…...
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习
进阶篇 第 6 篇:时间序列遇见机器学习与深度学习 (图片来源: Tara Winstead on Pexels) 在上一篇中,我们探讨了如何通过精心的特征工程,将时间序列预测问题转化为机器学习可以处理的监督学习任务。我们学习了如何创建滞后特征、滚动统计特征…...
RHCE 作业二(密钥登录实验)
1.进入ssh主配置文件恢复配置: 2.vim进入ssh子文件夹查看配置 3.重启服务 /etc/ssh/ key结尾或者.pub结尾的文件全部都是密钥 sshd_confg.d目录是服务的子配置文件 ssh_confg.d目录是客户端你的子配置文件 ~/.ssh/ 是当前用户的配置文件 4.服务器和客户端分别…...
android contentProvider 踩坑日记
写此笔记原因 学习《第一行代码》到第8章节实现provider时踩了一些坑,因此记录下来给后来人和自己一个提示,仅此而已。 包含内容 Sqlite数据库CURD内容provider界面provider项目中书籍管理provider实现逻辑用adb shell确认providercontentResolver接收…...
K8s:概念、特点、核心组件与简单应用
一、引言 在当今云计算和容器技术蓬勃发展的时代,Kubernetes(简称 K8s)已成为容器编排领域的事实标准。它为管理容器化应用提供了高效、可靠的解决方案,极大地简化了应用的部署、扩展和运维过程。无论是小型初创公司还是大型企业…...
基于表面肌电信号sEMG的手势识别——以Ninapro DB1数据集使用CNN网络识别为例
完整代码获取 评论区或者私信留邮箱 接论文辅导!中文核心辅导!SCI三四区辅导! 可接模型改进 任务描述 表面肌电信号( sEMG ) 是一种生物电信号,存在于肌肉神经。 当大脑下达肌肉动作指令,肌肉会产生控制信号ÿ…...
黑盒测试——等价类划分法实验
任务: 设某程序有两个输入:整数x1和整数x2,计算Yf(x1,x2)。x1和x2的取值范围为1< x1<500,1< x2<500。当x1在[1,200) 取值且x2在[1,300] 取值时,Yf(x1,x2) x1x2;当x1在[200,500] 取值且x2在[1,300] 取值时&…...
深度学习4月22笔记
1、过拟合与欠拟合 在训练深层神经网络时,由于模型参数较多,在数据量不足时很容易过拟合。而正则化技术主要就是用于防止过拟合,提升模型的泛化能力(对新数据表现良好)和鲁棒性(对异常数据表现良好)。 1. 概念认知 …...
【MySQL数据库入门到精通-03 数据类型及案列】
文章目录 一、三类数据类型二、数值类型三、字符串类型四、日期时间类型五、日期时间类型 一、三类数据类型 MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型。 二、数值类型 比如: 1). 年龄字段 – 不会出现负数…...
【机器学习】决策树算法中的 “黄金指标”:基尼系数深度剖析
一、基尼系数的基本概念 基尼系数(Gini Impurity)在决策树分类算法中,是用于衡量数据纯度的重要指标,与信息熵有着相似的功能。在样本集合里,基尼系数代表随机选取一个样本时,该样本被分错的概率 。假设一…...
植被参数遥感反演技术革命!AI+Python支持向量机/随机森林/神经网络/CNN/LSTM/迁移学习在植被参数反演中的实战应用与优化
在全球气候变化与生态环境监测的重要需求下,植被参数遥感反演作为定量评估植被生理状态、结构特征及生态功能的核心技术,正面临诸多挑战。随着遥感技术的发展,数据复杂度不断提升,模型精度的要求也越来越高。同时,多源…...
【AI】SpringAI 第四弹:接入本地大模型 Ollama
Ollama 是一个开源的大型语言模型服务工具。它的主要作用是帮助用户快速在本地运行大模型, 简化了在 Docker 容器内部署和管理大语言模型(LLM)的过程。 1. 确保Ollama 已经启动 # 查看帮助文档 ollama -h# 自动下载并启动 ollama run deeps…...
C# MP3 伴奏
使用建议: 参数调节指南: 低频人声残留:降低CenterFrequency(800-1500Hz) 高频人声残留:提高CenterFrequency(2500-3500Hz) 消除力度不足:提高EliminationStrength(0.9-1.0) 伴奏失真:降低EliminationSt…...
【springsecurity oauth2授权中心】将硬编码的参数提出来放到 application.yml 里 P3
在application.yml里添加配置 application.yml oauth2:client:id: clientsecret: secretauthentication-method: client_secret_basicgrant-types: authorization_code,refresh_tokenredirect-uris:- http://localhost:8081/login/oauth2/code/client- http://localhost:8081…...
【Ansible】批量管理 Windows自动化运维
一,前期准备 1,控制端(Linux)的要求 Ansible可以在安装了Python 2(2.7版)或Python 3(3.5及更高版本)的任何机器上运行。控制端计算机不支持Windows。 2,客户端&#x…...
AES-128、AES-192、AES-256 简介
AES(Advanced Encryption Standard) 是一种广泛使用的对称加密算法,由美国国家标准与技术研究院(NIST)于2001年正式采纳,用于替代旧的 DES 和 3DES。AES 基于 Rijndael 算法,支持 128 位、192 位…...
osxcross 搭建 macOS 交叉编译环境
1. osxcross 搭建 macOS 交叉编译环境 1. osxcross 搭建 macOS 交叉编译环境 1.1. 安装依赖1.2. 安装 osxcross 及 macOS SDK 1.2.1. 可能错误 1.3. 编译 cmake 类工程1.4. 编译 configure 类工程1.5. 单文件编译及其他环境编译1.6. 打包成 docker 镜像1.7. 使用 docker 编译 …...
联通余额查询接口
接口名称 1) 请求地址 https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&province051&commonBean.phoneNo13112345586&channelType101https://ucbss.10010.cn/npfweb/NpfWeb/Mustpayment/getMustpayment?number13112345586&…...
Python 设计模式:桥接模式
1. 什么是桥接模式? 桥接模式是一种结构型设计模式,它通过将抽象部分与其实现部分分离,使得两者可以独立变化。桥接模式的核心思想是将抽象和实现解耦,从而提高系统的灵活性和可扩展性。 桥接模式的核心思想是将一个类的接口与其…...
7.6 GitHub Sentinel后端API实战:FastAPI高效集成与性能优化全解析
GitHub Sentinel Agent 用户界面设计与实现:后端 API 集成 关键词:前后端分离架构、RESTful API 设计、数据序列化、命令行工具开发、集成测试 后端 API 集成关键技术实现 本阶段需要完成前端界面与后端服务的无缝对接,实现以下核心功能: #mermaid-svg-FFnzT13beWV52dtx …...
Smart AI:在AI浪潮中崛起的智能NFT生态革命者
技术引领,智能进化:Smart AI强势登场 在全球AI技术浪潮席卷之际,由澳大利亚顶尖技术团队倾力打造的Smart AI平台横空出世,以其革命性的NFT智能进化系统,正在彻底重塑数字资产的未来图景。Smart AI不仅是一个平台&…...
Linux——基于socket编程实现简单的Tcp通信
前言1:想要实现一个简单的Tcp通信不难,对于初学者而言,难点在于使用了大量未曾接触过的函数调用,所以本篇重点在于详解每部分代码中相关函数的功能。 1. 简单认识一下TCP传输 TCP通信协议是面向字节流的、可靠的、有连接的传输&a…...
STL C++详解——priority_queue的使用和模拟实现 堆的使用
priority_queue的使用 std::priority_queue 是 C 标准模板库(STL)中的一个容器适配器,提供了优先队列的功能。 优先队列:是一种特殊的队列,队列中的每个元素都有与之关联的优先级,优先级高的元素会先出队…...
是否可以使用非被动 S4P 文件进行反嵌?
AEDT 电路去嵌入算法使用假定线性时不变 (LTI) 行为的转换。如果非被动 S 参数块不是 LTI,则倒数函数将无法按预期工作。...
GAEA的技术优势:分层加密与去中心化数据治理
GAEA采用分层加密架构,将用户数据分为三个层级: 基础层(链上数据):用户身份哈希、资源贡献记录等核心数据通过零知识证明(ZK-SNARKs)进行链上加密,确保不可篡改和匿名性。 情感层…...
使用ZYNQ芯片和LVGL框架实现用户高刷新UI设计系列教程(第九讲)
这一期讲解GUI_guider中的容器控件的使用以及相关函数,容器本质上是具有布局和自动调整大小功能的基本对象 ,通常用来装载其他子控件。 打开上一期的项目,在工具栏中选中容器控件拖拽到界面中,具体如图所示: 容器默认…...
SparkStreaming概述
SparkStreaming主要用于流式计算,处理实时数据。 DStream是SparkStreaming中的数据抽象模型,表示随着时间推移收到的数据序列。 SparkStreaming支持多种数据输入源(如Kafka、Flume、Twitter、TCP套接字等)和数据输出位置…...
LeetCode---整数反转
整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [−231, 231 − 1] ,就返回 0。 示例 示例 1: 输入:x 123 输出:321 示例 2…...
Conceptrol: Concept Control of Zero-shot Personalized Image Generation(个性化图像生成)
文章目录 一、论文介绍二、项目部署三、效果展示3.1ipadapter plus sd1.5的效果3.2ipadapter plus sd1.5 plus concept的效果3.3两者结果的比较:原本的ipadapter、加了concept的ipadapter 一、论文介绍 个性化图像生成中的平衡问题:现有的zero-shot adap…...
【Harmony】常用工具类封装
文章目录 一,简介二,网络请求工具类2.1、鸿蒙原生http封装2.2、第三方axios封装(需提前下载依赖) 三、录音笔相关工具类3.1、录音封装(录入)3.2、录音封装(放音/渲染)3.3、文件写入封装(针对录音/放音功能) 四、RDB关系型数据库4.1、relationalStore简答…...
大模型部署到本地就是私有化部署吗?
大模型私有化的定义需要从部署方式和数据/模型控制权两个维度来理解,不能简单地仅以“部署位置”或“数据训练”单一条件判断。以下是具体分析: 1. 大模型私有化的核心定义 根据知识库中的描述([1][2][3][8]): 私有化…...
C语言高频面试题——嵌入式系统中中断服务程序
在嵌入式系统中,中断服务程序(ISR)的设计需遵循严格的规则以确保系统稳定性和实时性。以下是对这段代码的分析及改进建议: 代码分析 __interrupt double compute_area (double radius) { double area PI * radius * radius; pri…...
JavaFX 实战:从零打造一个功能丰富的英文“刽子手”(Hangman)游戏
大家好!今天我们要挑战一个经典的单词猜谜游戏——“刽子手”(Hangman),并使用 JavaFX 这个强大的 GUI 工具包来赋予它现代化的交互体验。这个项目不仅有趣,而且是学习和实践 JavaFX 核心概念的绝佳途径,涵…...
第 2.1 节: 机器人仿真环境选择与配置 (Gazebo, MuJoCo, PyBullet)
在真实机器人硬件上进行开发和测试既耗时又存在风险(硬件损坏、安全问题)。机器人仿真环境提供了一个虚拟的沙盒,让开发者能够在计算机中模拟机器人的物理行为、传感器读数和环境互动,极大地加速了开发、测试和调试过程。特别是对…...
网络开发基础(游戏)之 粘包分包
粘(nin)包、分包 在网络通信中,TCP协议是面向流的协议,没有消息边界概念,粘包和分包是常见的问题。在某种情况下(例如网络环境不稳定)就会导致"粘包"和"分包"问题…...
联邦元学习实现个性化物联网的框架
随着数据安全和隐私保护相关法律法规的出台,需要直接在中央服务器上收集和处理数据的集中式解决方案,对于个性化物联网而言,训练各种特定领域场景的人工智能模型已变得不切实际。基于此,中山大学,南洋理工大学…...
使用 Nacos 的注意事项与最佳实践
📹 背景 Nacos 凭借其强大💪的服务发现、配置管理和服务管理能力,成为构建分布式系统的得力助手。然而,要充分发挥 Nacos 的优势,实现系统的高性能、高可用,掌握其使用过程中的注意事项和最佳实践至关…...
在Pytorch中使用Tensorboard可视化训练过程
【在Pytorch中使用Tensorboard可视化训练过程】 https://www.bilibili.com/video/BV1Qf4y1C7kz/?share_sourcecopy_web&vd_sourcef00bfb41b3b450c3767070ed82f30ac8 主要功能: 1.保存网络结构图 2.保存训练集的损失Loss,验证集的正确性Accuracy以…...
15.电感特性在EMC设计中的运用
电感特性在EMC设计中的运用 1. 共模电感与差模电感的差异2. 电感的高频等效特性3. 电感在EMC设计中的使用注意事项3.1 LC滤波计算3.2 并联型多级浪涌防护的电感退耦 1. 共模电感…...
代理设计模式:从底层原理到源代码 详解
代理设计模式(Proxy Pattern)是一种结构型设计模式,它通过创建一个代理对象来控制对目标对象的访问。代理对象充当客户端和目标对象之间的中介,允许在不修改目标对象的情况下添加额外的功能(如权限控制、日志记录、延迟…...
25、简述.NET程序集(Assembly)
.NET 程序集(Assembly) .NET 程序集(Assembly) 是 .NET 应用程序的基本部署单元,包含以下核心内容: 类型与代码: 存储类、接口等类型的定义及实现(以中间语言 IL 形式)。…...
JavaScript 笔记 --- part 5 --- Web API (part 3)
(webAPI part3) BOM 操作 JS 执行机制 javascript 是单线程的, 也就是说, 只能同时执行一个任务。 为了解决这个问题, 利用多核 CPU 的计算能力, HTML5 提出 Web Worker API, 允许 JavaScript 脚本创建多个线程, 并将任务分配给这些线程。 于是, JS 出现了同步和异步的概念。…...
HCIP(OSPF)(3)
OSPF 报文结构 公共头部:包含版本(8bit)、类型(8bit)、报文长度(16bit)、路由器 ID(32bit)、区域 ID(32bit)、校验和(16bit࿰…...
Docker:重塑应用开发与部署的未来[特殊字符]
Docker:重塑应用开发与部署的未来🚀 在数字化转型的浪潮中🌊,应用开发与部署面临着诸多挑战,如环境一致性差、资源利用率低、运维复杂等。而Docker,作为容器技术领域的明星产品🌟,凭…...