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

JavaScript函数与方法详解

目录

一、函数的定义

1. 函数声明

2. 函数表达式

3. 箭头函数

二、函数的调用

1. 调用方式

2. 参数数量的灵活性

三、arguments 对象

1. 基本概念

2. 属性

3. 应用场景

4. 转换为真数组

5. 总结

四、Rest参数

1. 基本概念

2. 特点

3. 应用场景

4. 总结

五、变量的作用域

1. 全局作用域

2. 局部作用域

3. 块级作用域

4. let与const

六、方法

1. 方法定义与调用

2. apply方法


在JavaScript中,函数和方法是执行特定任务的代码块,尽管它们在很多方面相似,但存在一些关键差异,主要体现在它们如何被定义和调用上。

一、函数的定义

在JavaScript中,函数可以通过多种方式定义,包括函数声明、函数表达式和箭头函数等。

1. 函数声明

函数声明使用function关键字定义,具有函数名和参数列表,并以分号结束。

 function add(a, b) {return a + b;}​console.log(add(3, 5)); // 输出:8

函数声明的特点是无论在何处调用,都会从头开始执行。

2. 函数表达式

函数表达式将函数赋值给一个变量,可以是匿名函数或命名函数。

 const add = function (a, b) {return a + b;};console.log(add(3, 5)); // 输出:8

函数表达式可以在任何地方定义和调用。

3. 箭头函数

箭头函数提供了更简洁的语法,减少了代码量。

 const add = (a, b) => a + b;console.log(add(3, 5)); // 输出:8

箭头函数不仅提供了更简洁的语法,还解决了传统函数中 this 指向问题,使代码更加清晰和易于维护。

二、函数的调用

1. 调用方式

调用函数很简单,只需使用函数名并传递必要的参数。

 console.log(add(3, 3)); // 输出: 6

2. 参数数量的灵活性

JavaScript对函数的参数数量使用非常灵活。如果传递的参数过多,多余的部分会被忽略;如果传递的参数过少,缺失的参数将被赋值为undefined

 function add(a, b) {return a + b;}​console.log(add(3, 3, 3)); // 输出:6console.log(add(3)); // 输出:NaN

三、arguments 对象

1. 基本概念

arguments 对象是 JavaScript 中所有非箭头函数的局部变量,用于存储传递给函数的参数。它是一个类数组对象,具有 length 属性,索引从 0 开始,但没有 Array 的内置方法如 forEach()map()arguments 对象可以通过 Array.prototype.slice.call(arguments)Array.from(arguments) 转换为真正的 Array,但不支持 pop() 等方法。当调用的参数多于函数正式声明的参数时,arguments 对象可以用来处理可变数量的参数。

2. 属性

  • arguments.callee:指向当前执行的函数。

  • arguments.length:表示传递给函数的参数数量。

  • arguments[Symbol.iterator]:返回一个数组迭代器对象,包含参数中每个索引的值。

3. 应用场景

arguments 对象常用于处理可变数量的参数、递归操作等场景。例如,在递归函数中,可以通过 arguments.callee 获取当前函数引用,从而实现递归计算。

以下是使用 arguments 对象的示例代码:

 // 打印元素function printArgs() {for (let i = 0; i < arguments.length; i++) {console.log(arguments[i]);}}​printArgs(1, 'hello', true); // 输出:1 hello true​// 求和function sum() {let total = 0;for (let i = 0; i < arguments.length; i++) {total += arguments[i];}return total;}​console.log(sum(1, 2, 3)); // 输出:6​// 递归计算阶乘function factorial(num) {if (num <= 1) {return 1;} else {return num * arguments.callee(num - 1);}}​console.log(factorial(5)) // 输出:120

4. 转换为真数组

虽然 arguments 对象不直接支持数组方法,但可以通过 Function.call 间接调用,将 arguments 转换为数组:

 function convertToArray() {return Array.prototype.slice.call(arguments);}​console.log(convertToArray(1, 2, 3)); // 输出:[1, 2, 3]

5. 总结

arguments 对象是 JavaScript 中一个强大的工具,用于处理函数调用时的参数信息。尽管它不是真正的数组,但通过一些技巧可以将其转换为数组,并利用其特性来编写灵活的函数。然而,在现代 JavaScript 中,推荐使用剩余参数(rest parameters)来替代 arguments 对象,因为剩余参数提供了更好的可读性和功能。

四、Rest参数

1. 基本概念

JavaScript中的Rest参数(Rest Parameters)是ES6(ECMAScript 2015)引入的一个重要特性,用于处理函数中不定数量的参数。Rest参数允许开发者定义一个函数,使其能够接收任意数量的参数,并将这些参数收集到一个数组中。这种语法通过在参数列表末尾添加三个点(...)来实现。例如:

 function myFunction(a, b, ...args) {console.log(a); // 输出第一个参数console.log(b); // 输出第二个参数console.log(args); // 输出剩余的所有参数,组成一个数组}​myFunction(1, 2, 3, 4, 5); // 输出:1, 2, [3, 4, 5]

在本例中,...args会收集所有未命名的额外参数,并将其存储为一个数组。

2. 特点

  • 只能出现在参数列表的最后:Rest参数必须是最后一个参数,不能与其他命名参数混合使用。

 function f(x, ...y, z) { } // 报错:Uncaught SyntaxError: Rest parameter must be last formal parameter.
  • 返回值是一个数组:Rest参数总是返回一个数组,即使没有传递额外的参数,它也会返回一个空数组。

 function f(x, ...y) {console.log(y);}​f(1); // 输出:[]
  • arguments对象的区别:Rest参数是一个真正的数组,而arguments对象是一个类数组对象,不支持数组方法如sort()map()等。

  • 只能使用一次:一个函数只能有一个Rest参数,且必须是最后一个参数。

3. 应用场景

Rest参数在处理不定数量的参数时非常有用,例如计算总和、合并数组、解构赋值等。

 // 计算总和function sum(...numbers) {return numbers.reduce((acc, curr) => acc + curr, 0);}​console.log(sum(1, 2, 3, 4)); // 输出:10​// 合并数组function mergeArrays(...arrays) {return arrays.reduce((acc, curr) => acc.concat(curr), []);}​console.log(mergeArrays([1, 2], [3, 4], [5])); // 输出:[1, 2, 3, 4, 5]​// 解构赋值const [a, b, ...rest] = [1, 2, 3, 4];console.log(rest); // 输出:[3, 4]

4. 总结

Rest参数是JavaScript中处理不定数量参数的强大工具,它简化了函数定义和调用的复杂性。通过将多余的参数收集到一个数组中,开发者可以更方便地操作这些参数。Rest参数与扩展运算符的结合使用,进一步增强了其灵活性和实用性。

五、变量的作用域

JavaScript中的变量作用域分为全局作用域和局部作用域。

1. 全局作用域

全局作用域是指在所有函数之外定义的变量,其作用域范围是同一个页面文件中的所有脚本,可以在任何地方使用,直到页面关闭。

 const globalVar = 'I am global!';console.log(globalVar); // 输出:"I am global!"

2. 局部作用域

局部作用域是指在函数内部声明的变量,仅在该函数及其嵌套函数中有效,不能在函数外部访问。

 function test() {const localVar = 'I am local!';console.log(localVar);}​test(); // 输出:"I am local!"console.log(localVar); // 报错:Uncaught ReferenceError: localVar is not defined.

3. 块级作用域

ES6 引入了 letconst 关键字,它们提供了块级作用域(如if语句、for循环等)。使用 letconst 声明的变量只在块级中可用。

 if (true) {let blockScopeVar = 1;const blockScopeConst = 2;}console.log(blockScopeVar); // 报错:Uncaught ReferenceError: blockScopeVar is not defined.console.log(blockScopeConst); // 报错:Uncaught ReferenceError: blockScopeConst is not defined.

4. letconst

  • let:声明一个块作用域的局部变量,可以重新赋值。

  • const:声明一个块作用域的常量,一旦赋值就不能重新赋值(但如果是对象或数组,其内容仍然可以修改)。

 const PI = 3.14;PI = 3.14159; // 报错:Uncaught TypeError: Assignment to constant variable.

六、方法

JavaScript 方法(methods)是定义在对象中的函数,可以通过对象调用,用于执行特定任务或操作。这些方法可以是对象自带的,也可以是我们自定义的。

1. 方法定义与调用

 const person = {name: 'Tom',// 定义方法greet: function () {console.log(`Hello, my name is ${this.name}!`);}};// 调用方法person.greet(); // 输出:"Hello, my name is Tom!"

2. apply方法

apply 方法是 JavaScript 中 Function.prototype 的一个方法,允许我们在指定的上下文(即 this 值)中调用一个函数,并且可以传递一个参数数组作为函数的参数列表。apply 方法的第一个参数是 this 的值,第二个参数是一个数组或类数组对象,包含了将要传递给函数的参数。

 function greet(greeting, name) {console.log(greeting + ", " + name + "!");}​const person = {name: "Tom"};​// 使用apply调用greet函数,设置this为person对象,并以数组形式提供参数。greet.apply(person, ["Hello", person.name]); // 输出: Hello, Tom!

apply类似的call方法允许我们调用一个函数,设置this的值,并直接提供参数列表。

 function greet(greeting, name) {console.log(greeting + ", " + name + "!");}​const person = {name: "Tom"};​greet.call(person, "Hi", person.name); // 输出: Hi, Tom!

相关文章:

JavaScript函数与方法详解

目录 一、函数的定义 1. 函数声明 2. 函数表达式 3. 箭头函数 二、函数的调用 1. 调用方式 2. 参数数量的灵活性 三、arguments 对象 1. 基本概念 2. 属性 3. 应用场景 4. 转换为真数组 5. 总结 四、Rest参数 1. 基本概念 2. 特点 3. 应用场景 4. 总结 五、变…...

AI 网关对决:Higress 与 OneAPI 的功能对比

什么是 AI 网关&#xff1f; AI 网关旨在统一管理与各种大型语言模型&#xff08;LLMs&#xff09;的交互。通过提供单一入口点&#xff0c;它解决了使用来自不同供应商的多个 AI 模型所带来的复杂性问题。这不仅简化了访问流程&#xff0c;提高了系统稳定性&#xff0c;还降低…...

封装一个sqlite3动态库

作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、项目案例 二…...

1.攻防世界 unserialize3(wakeup()魔术方法、反序列化工作原理)

进入题目页面如下 直接开审 <?php // 定义一个名为 xctf 的类 class xctf {// 声明一个公共属性 $flag&#xff0c;初始值为字符串 111public $flag 111;// 定义一个魔术方法 __wakeup()// 当对象被反序列化时&#xff0c;__wakeup() 方法会自动调用public function __wa…...

DeepSeek能做分析吗?从需求规约到分析类图的实验

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 今天我们来尝试DeepSeek能不能帮我们从需求转到分析。 给定一个用例规约&#xff0c;我们让它按照面向对象分析设计方法&#xff0c;出一个分析类图。过程如下&#xff1a; 可以帮助提…...

九.Spring Boot使用 ShardingSphere + MyBatis + Druid 进行分库分表

文章目录 前言一、引入依赖二、创建一个light-db_1备用数据库三、配置文件 application-dev.yml四、创建shardingsphere-config.yml完整项目结构 五、测试总结 前言 在现代化微服务架构中&#xff0c;随着数据量的不断增长&#xff0c;单一数据库已难以满足高可用性、扩展性和…...

RNN复兴!性能反超Transformer,训练速度提升1300倍!

在最新的顶会论文中&#xff0c;RNN的改进创新更是层出不穷。Bengio团队提出的minLSTM和minGRU&#xff0c;通过去除隐藏状态的依赖和简化门控机制&#xff0c;显著减少了参数量和计算量。这些模型可以使用并行扫描算法进行训练&#xff0c;大大加快了训练速度。例如&#xff0…...

C语言第18节:自定义类型——联合和枚举

1. 联合体 C语言中的联合体&#xff08;Union&#xff09;是一种数据结构&#xff0c;它允许在同一内存位置存储不同类型的数据。不同于结构体&#xff08;struct&#xff09;&#xff0c;结构体的成员各自占有独立的内存空间&#xff0c;而联合体的所有成员共享同一块内存区域…...

2025年二级建造师报名流程图解

2025年二级建造师报名时间&#xff01;附报名流程&#xff01; ⏰️已公布25年二建考试时间的省份如下&#xff1a; ️4月19日、20日考试的城市有&#xff1a;贵州 ️5月10日、11日考试的城市有&#xff1a;湖北、陕西、宁夏、甘肃、福建、浙江、江西、黑龙江、河南、湖南、…...

AWTK fscript 中的 TCP/UDP 客户端扩展函数

fscript 是 AWTK 内置的脚本引擎&#xff0c;开发者可以在 UI XML 文件中直接嵌入 fscript 脚本&#xff0c;提高开发效率。本文介绍一下 fscript 中的 TCP/UDP 客户端扩展函数。 1.iostream_tcp_create 创建 TCP 客户端输入输出流对象。 原型 iostream_tcp_create(host, por…...

用php tp6对接钉钉审批流的 table 表格 明细控件 旧版sdk

核心代码 foreach ($flows[product_list] as $k>$gift) {$items_list[] [[name > 商品名称, value > $gift[product_name] ?? ],[name > 规格, value > $gift[product_name] ?? ],[name > 数量, value > $gift[quantity] ?? ],[name > 单位, v…...

【DuodooBMS】给PDF附件加“受控”水印的完整Python实现

给PDF附件加“受控”水印的完整Python实现 功能需求 在实际工作中&#xff0c;许多文件需要添加水印以标识其状态&#xff0c;例如“受控”“机密”等。对于PDF文件&#xff0c;添加水印不仅可以增强文件的可识别性&#xff0c;还可以防止未经授权的使用。本代码的功能需求是…...

前缀和算法篇:解决子数组累加和问题

前缀和算法篇&#xff1a;解决子数组累加和问题 1.前缀和原理 那么在介绍前缀和的原理之前&#xff0c;那么我们先来说下前缀和最基本的一个应用场景&#xff0c;那么就是如我们标题所说的子数组累加和问题&#xff0c;那么假设我们现在有一个区间为[L,R]的数组&#xff0c;那…...

大语言模型多代理协作(MACNET)

大语言模型多代理协作(MACNET) Scaling Large-Language-Model-based Multi-Agent Collaboration 提出多智能体协作网络(MACNET),以探究多智能体协作中增加智能体数量是否存在类似神经缩放定律的规律。研究发现了小世界协作现象和协作缩放定律,为LLM系统资源预测和优化…...

vue项目使用vite和vue-router实现history路由模式空白页以及404问题

开发项目的时候&#xff0c;我们一般都会使用路由&#xff0c;但是使用hash路由还是history路由成为了两种选择&#xff0c;因为hash路由在url中带有#号&#xff0c;history没有带#号&#xff0c;看起来更加自然美观。但是hash速度更快而且更通用&#xff0c;history需要配置很…...

【Linux】从一台windows电脑访问局域网下另一台linux电脑详细操作步骤

以下是在Windows电脑B上访问Linux电脑A的文件并使用bash终端的详细步骤&#xff1a; 一、在Linux电脑A上配置SSH服务&#xff08;用于终端操作&#xff09; 安装SSH服务 sudo apt update && sudo apt install openssh-server启动SSH服务并设置开机自启 sudo systemctl …...

Makefile的用法及算法应用

编译的过程 算法&#xff1a;解决特定问题的求解步骤 算法的设计 1.正确性 语法正确合法的输入能得到合理的结果对非法的输入&#xff0c;给出满足要求的规格说明对精心选择&#xff0c;甚至刁难的测试都能正常运行&#xff0c;结果正确 2.可读性&#xff0c;便于交流&…...

Elasticsearch:15 年来致力于索引一切,找到重要内容

作者&#xff1a;来自 Elastic Shay Banon 及 Philipp Krenn Elasticsearch 刚刚 15 岁了&#xff01;回顾过去 15 年的索引和搜索&#xff0c;并展望未来 15 年的相关内容。 Elasticsearch 刚刚成立 15 周年。一切始于 2010 年 2 月的一篇公告博客文章&#xff08;带有标志性的…...

MongoDB 扩缩容实战:涵盖节点配置、服务启动与移除操作

#作者&#xff1a;任少近 文章目录 一、扩容在245节点上配置配置config server&#xff1a;配置mongos启动config server安装工具mongosh添加245新节点到副本集配置分片副本集启动路由并分片 二、缩容Conf server上去掉server4shard上去掉server4mongos上去掉server4 一、扩容…...

Bitmap在数仓中的应用

一、背景 在数据仓库的日常工作中&#xff0c;我们经常需要面对海量数据的存储和高效查询问题。尤其是&#xff0c;当业务对性能的要求越来越高、数据量持续增长时&#xff0c;传统的处理方式往往显得笨拙而低效。而这时候&#xff0c;Bitmap&#xff08;位图&#xff09;作为…...

C++病毒(^_^|)(2)

第二期 声明&#xff1a; 仅供损害电脑&#xff0c;不得用于非法。损坏电脑&#xff0c;作者一律不负责。此作为作者原创&#xff0c;转载请经过同意。 直接上代码 #include <bits/stdc.h> #include <windows.h> using namespace std; HHOOK g_hHook;void lrud(…...

Linux 内核架构入门:从基础概念到面试指南*

1. 引言 Linux 内核是现代操作系统的核心&#xff0c;负责管理硬件资源、提供系统调用、处理进程调度等功能。对于初学者来说&#xff0c;理解 Linux 内核的架构是深入操作系统开发的第一步。本篇博文将详细介绍 Linux 内核的架构体系&#xff0c;结合硬件、子系统及软件支持的…...

leetcode-495.提莫攻击

leetcode-495.提莫攻击 文章目录 leetcode-495.提莫攻击一.题目描述二.代码提交三.解释 一.题目描述 二.代码提交 #include <vector> using namespace std;int findPoisonedDuration(vector<int>& timeSeries, int duration) {int total 0;for (int i 0; i …...

mysql 参数max_connect_errors研究

1.在server端设置max_connect_errors3&#xff0c;超过3次连接错误就block mysql> set global max_connect_errors3; Query OK, 0 rows affected (0.00 sec) mysql> show variables like max_connect_errors; --------------------------- | Variable_name | Value…...

vscode无法ssh连接远程机器解决方案

远程服务器配置问题 原因&#xff1a;远程服务器的 SSH 服务配置可能禁止了 TCP 端口转发功能&#xff0c;或者 VS Code Server 在远程服务器上崩溃。 解决办法 检查 SSH 服务配置&#xff1a;登录到远程服务器&#xff0c;打开 /etc/ssh/sshd_config 文件&#xff0c;确保以下…...

sql盲注获取数据库的表名、列名和具体数据

1.时间盲注 获取表名 sql id1 AND IF(ASCII(SUBSTRING((SELECT table_name FROM information_schema.tables WHERE table_schemaDATABASE() LIMIT 1),1,1))97, SLEEP(5), 0) 获取列名 sql id1 AND IF(ASCII(SUBSTRING((SELECT column_name FROM information_schema.col…...

清华大学新闻与传播学院沈阳团队出品的《DeepSeek:从入门到精通》104页PDF

前言 本机运行DeepSeek R1大模型文章如下&#xff1a; Windows电脑本地部署运行DeepSeek R1大模型&#xff08;基于Ollama和Chatbox&#xff09;【保姆级万字教程】在Windows计算机部署DeepSeek大模型&#xff0c;给在实验室无外网的同事们用&#xff08;基于Ollama和OpenWebUI…...

使用sublime_text中,TAB键无效怎么解决???

如果你也有这样的困扰&#xff0c;请你跟着我下面的步骤操作 点击首选项&#xff08;如下图所示&#xff09; 找到下面这段代码并注释掉 { “keys”:[“tab”], “args”:{“action”:“expand_abbreviation”}, “command”:“run_emmet_action”, “context”:[ { “key”:“…...

Java IO流详解

1. IO概述 IO&#xff08;Input/Output&#xff09;即输入和输出&#xff0c;指的是设备或环境之间进行数据的输入或输出。例如&#xff0c;键盘是输入设备&#xff0c;显示器是输出设备。在Java中&#xff0c;输入输出问题通过流&#xff08;Stream&#xff09;对象来解决。以…...

智慧农业-虫害及生长预测

有害生物防控系统是一个综合性的管理体系&#xff0c;旨在预防和控制对人类生活、生产甚至生存产生危害的生物。这些生物可能包括昆虫、动物、植物、微生物乃至病毒等。 一、系统构成 1、监测预警系统&#xff1a;利用智能传感器、无人机、遥感技术等手段&#xff0c;实时监测…...

ASIL D要达到多少fit

ASIL&#xff08;Automotive Safety Integrity Level&#xff0c;汽车安全完整性等级&#xff09;D是ISO 26262标准中最高等级的安全要求&#xff0c;其对应的随机硬件故障概率目标&#xff08;以FIT表示&#xff09;需满足以下要求&#xff1a; ASIL D的FIT目标 根据 ISO 262…...

与传统光伏相比 城电科技的光伏太阳花有什么优势?

相比于传统光伏&#xff0c;城电科技的光伏太阳花有以下优势&#xff1a; 一、发电效率方面 智能追踪技术&#xff1a;光伏太阳花通过内置的智能追踪系统&#xff0c;采用全球定位跟踪算法&#xff0c;能够实时调整花瓣&#xff08;即光伏板&#xff09;的角度&#xff0c;确…...

2025年SEO工具有哪些?老品牌SEO工具有哪些

随着2025年互联网的发展和企业线上营销的日益重要&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;逐渐成为了提高网站曝光率和流量的重要手段。SEO的工作不仅仅是简单地通过关键词优化和内容发布就能够实现的&#xff0c;它需要依赖一系列专业的SEO工具来帮助分析、监测和…...

深入解析与解决 Oracle 报错:ORA-29275 部分多字节字符20250213

&#x1f6e0;️ 深入解析与解决 Oracle 报错&#xff1a;ORA-29275 部分多字节字符 引言 &#x1f31f; 在与 Oracle 数据库打交道的日常工作中&#xff0c;你是否遇到过 ORA-29275: partial multibyte character 这个令人头疼的错误&#xff1f;这个错误通常与字符编码、数…...

HTML应用指南:利用GET请求获取全国海底捞门店位置信息

随着新零售业态的快速发展&#xff0c;门店位置信息的获取变得越来越重要。作为餐饮服务行业的先锋&#xff0c;海底捞不仅在服务质量上持续领先&#xff0c;还积极构建广泛的门店网络&#xff0c;以支持其不断增长的用户群体。为了更好地理解和利用这些数据&#xff0c;本篇文…...

数据流图和数据字典

在面向结构的分析和设计阶段&#xff0c;**数据流图&#xff08;Data Flow Diagram, DFD&#xff09;和数据字典&#xff08;Data Dictionary&#xff09;**是两个非常重要的工具&#xff0c;它们分别从不同的角度描述系统的功能和数据结构&#xff0c;帮助开发团队更好地理解和…...

Ubuntu 22.04 LTS 安装MinerU

1. 检测是否已安装nvidia驱动 nvidia-smi 如果看到类似如下的信息&#xff0c;说明已经安装了nvidia驱动&#xff0c;可以跳过步骤2 Note CUDA Version 显示的版本号应 > 12.1&#xff0c;如显示的版本号小于12.1&#xff0c;请升级驱动 2. 安装驱动 如没有驱动&#…...

OPEN CODER : THE OPEN COOKBOOK FOR TOP -TIER CODE LARGE LANGUAGE MODELS

Abstract 大型语言模型&#xff08;LLMs&#xff09;在代码领域已经成为不可或缺的工具&#xff0c;包括代码生成、推理任务和代理系统等多个方面。虽然开放获取的代码LLMs的性能越来越接近专有模型&#xff0c;但适合严格科学研究的优质代码LLMs&#xff0c;特别是那些具有可…...

C语言中printf()函数,格式输出符

在 C 语言中&#xff0c;printf() 函数的格式输出符&#xff08;格式说明符&#xff09;用于控制输出的格式和数据类型。以下是常见的格式说明符及其用法&#xff1a; 基本格式符 打印各种类型的值 格式输出符数据类型说明%dint输出有符号十进制整数%uunsigned int输出无符号…...

EasyRTC嵌入式WebRTC视频通话SDK支持Web浏览器、Linux、ARM、Android、iOS

随着互联网技术的飞速发展&#xff0c;实时通信&#xff08;RTC&#xff09;已经成为现代应用中不可或缺的一部分。无论是视频会议、在线教育、远程医疗&#xff0c;还是社交娱乐&#xff0c;实时通信技术都在其中扮演着重要角色。 然而&#xff0c;WebRTC技术在PC和移动端的支…...

【JS球球大作战项目实战】+在线体验

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…...

PHP高效、轻量级表格数据处理库 OpenSpout ,很好用

OpenSpout 是一个高效、轻量级的 PHP 库&#xff0c;用于处理电子表格文件&#xff08;如 Excel 和 CSV&#xff09;。它支持读取和写入大型文件&#xff0c;且内存占用低。本文将详细介绍如何安装和使用 OpenSpout。 目录 安装 基本使用 高级功能 参考文档 安装 OpenSp…...

数据库第三次作业

第一题&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课表&#xff1a;S…...

Mac 下使用多版本 Node

一、导读 使用 n 实现 Mac 下 Nodejs 的多版本切换&#xff0c;需要先安装一个版本的 Node.js&#xff0c;然后使用 npm 安装 n&#xff0c;再通过 n 管理 node 的多版本切换。 二、使用 npm 全局安装 n sudo npm install -g n 三、根据需求安装指定版本的 node sudo -E n…...

【油猴脚本/Tampermonkey】DeepSeek 服务器繁忙无限重试(20250214优化)

目录 一、 引言 二、 逻辑 三、 源代码 四、 添加新脚本 五、 使用 六、 BUG 七、 优化日志 1.获取最后消息内容报错 2.对话框切换无法正常使用 一、 引言 deepseek演都不演了&#xff0c;每次第一次提问就正常&#xff0c;后面就开始繁忙了&#xff0c;有一点阴招全…...

安全测试|SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时&#xff0c;利用服务器漏洞&#xff0c;由攻击者构造请求&#xff0c;服务器端发起请求的安全漏洞&#xff0c;攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…...

Redisson介绍和入门使用

一、什么是Redisson&#xff1f; Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务&#xff0c;其中就包含了各种分布式锁的实现。 官网地址…...

TUSB422 MCU 软件用户指南

文章目录 TUSB422 MCU 软件用户指南 目录表格图表1. 介绍2. 配置2.1 通用配置2.2 USB-PD 3.0 支持2.3 VDM 支持 3. 代码 ROM/RAM 大小优化4. 通过 UART 调试4. 移植到其他微控制器 TUSB422 MCU 软件用户指南 摘要 本文档是 TUSB422 微控制器基于 Type-C 端口控制&#xff08;…...

归并排序 和 七大算法的总结图

目录 什么是递归排序&#xff1a; 图解&#xff1a; 递归方法&#xff1a; 代码实现&#xff1a; 思路分析&#xff1a; 非递归方法&#xff1a; 思路&#xff1a; 代码实现&#xff1a; 思路分析&#xff1a; 什么是递归排序&#xff1a; 先将数据分解成诺干个序列&#xff0…...

MySQL调用存储过程和存储函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...