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

5.深入理解箭头函数 - JS

什么是箭头函数?

箭头函数是指通过箭头函数表达式创建的函数,是匿名函数。

箭头函数表达式的语法更简洁,但语义有差异,所以用法上也有一些限制。尽管如此,箭头函数依旧被广泛运用在需要执行“小函数”的场景。

箭头函数表达式的基本语法

/* 函数体只有一个语句 */
() => 单个语句
单个参数 => 单个语句
(单个参数) => 单个语句
(参数1, 参数2) => 单个语句
let f = ()=>console.log(111)
f() === undefined		// true/* 函数体有多个语句,使用{} */
() => { 多个语句 }
单个参数 => { 多个语句 }
(单个参数) => { 多个语句 }
(参数1, 参数2) => { 多个语句 }
let g = ()=>{}

箭头函数表达式的语法说明

  1. 只有一个参数时,() 可以省略;
  2. 函数体只有单个语句,{} 可以省略,返回值就是该语句/表达式的值;
  3. 函数体有多个语句,必须使用 {} 包围;
  4. 语法上,返回一个对象字面量时,加 ()
  5. 箭头是复合符号,不要空格或换行;
  6. 参数列表和箭头之间不要换行;
  7. 箭头 => 的优先级不高,在符合运算中尽量用 () 包围。
let f = ()=>{ a:1 }			// 不报错,a被当成一个标签,执行了表达式 “1”,返回 undefined
let f = ()=>{ a: 1, b: 2 }	// 报错
let f = ()=>{ a: 1; b: 2 }	// 不报错,a,b都时标签
let f = ()=>( {a:1, b:2} )	// 不报错,()改变了优先级let g = () = > {}			// 报错
let g = () 					// 报错=> {}let x = f || ( ()=>{} )

箭头函数的限制:

  • 箭头函数不绑定 this,会捕获其声明所在上下文this,且 call/apply/bind 方法都不会改变其指向;
  • 不能用作构造函数,不能使用 new 调用,会引发类型错误,函数体内也无法访问 new.target
  • 不能使用 yield,不能用做生成器函数;
  • 没有 arguments 对象,可以使用剩余参数取而代之;
  • 没有原型对象 prototype 这个属性。

this 的绑定问题

箭头函数没有独立的 this,下面将依次总结其如何绑定上下文的 this、避免用作方法等限制问题。

绑定上下文的 this

箭头函数捕获声明所在上下文this 并绑定,考虑捕获绑定顺序如下:

  1. 外层函数:内部的箭头函数和外部(临近)的普通函数有相同的 this 绑定;
  2. :类具有封闭独立的 this 上下文,箭头函数作为方法时,将自动绑定实例的 this;本质就像闭包,有独立的变量环境,不会因为属性解构等操作改变其绑定。
  3. 全局:当以上不符合,一般和全局 globalThis 绑定。

由于箭头函数会绑定外部函数的 t h i s this this,所以在一些需要访问外部属性时常用,诸如函数 setTimeout/setInterval、方法 forEach/map 等。下面一个例子中:

  • showGroup2 内部的箭头函数绑定的是外部函数的 this,指向 w b 对象 wb对象 wb对象,所以能够访问其属性 group
  • showGroup3 绑定的是全局(globalThis),指向 全局对象 全局对象 全局对象,访问的是全局属性;
  • convert 内部的箭头函数绑定的是 this.datathis,指向 w b 对象 wb对象 wb对象,能够正确访问属性 group
  • convert2 内部的箭头函数绑定的也是 this.datathis,但外部也是箭头函数,指向 全局对象 全局对象 全局对象,将会报错或者得到错误的结果,所以尽量不使用箭头函数作为方法。
const wb = {group: '第一组',data: [1, 2, 3, 4],showGroup: function () { console.log(this.group); },showGroup2: function () { (() => { console.log(this.group) })(); },showGroup3: () => { console.log(this.group) },convert: function() {let res = new Array;this.data.forEach( (elem)=>{ res.push(this.group + ':' + elem); } );return res;},convert2: () => {let res = new Array;// console.log(this == globalThis),	// true// console.log(this.data);			// undefined/其他this.data.forEach( (elem)=>{ res.push(this.group + ':' + elem); } );return res;},
}

类的封闭性使得箭头函数与实例自动绑定,每创建一个实例,都分配一个闭包,和实例环境自动绑定。下面一个例子中:

  • 箭头函数 fa 绑定具体的实例对象,解构赋值不会改变 this 指向;
  • 普通方法 fd 在构造时绑定自身,解构赋值也不会改变 this 指向;
  • 另外的 fb/fc 作为普通方法,在构造时没有绑定自身,解构赋值会改变 this 指向。
class C {constructor() { this.fd = this.fd.bind(this) };a = 1;fa = ()=>{ console.log(this.a); };fb = function () { console.log(this.a); };fc () { console.log(this.a); };fd = function () { console.log(this.a); };
}let c = new C();
c.fa(); 					// 1
let { fa, fb, fc, fd } = c;
fa(); 						// 1
fb();						// 报错,属性未定义
fc();						// 报错,属性未定义
fd();						// 1

call、bind 和 apply 不会改变箭头函数的 this 指向

箭头函数表达式是执行完创建的,所以 this 绑定声明定义所在上下文的 this。callbindapply 方法都不会改变其指向。下面一个例子中:

  • 普通函数的 this 绑定,可以根据需求被 call/apply/bind 改变,指向 o o o 对象;
  • 箭头函数的 this 绑定,不可以call/apply/bind 改变,依旧指向全局对象。
const o = {	a: 10 }
globalThis.a = 100;const add = function (m, n) { return this.a + m + n; }
const add2 = n => this.a + m + n;add.call(o, 2, 3)			// 15
add.apply(o, [2, 3])		// 15
let boundedAdd = add.bind(o);
boundedAdd(2, 3)			// 15add2.call(o, 2, 3)			// 105
add2.apply(o, [2, 3])		// 105
let boundedAdd2 = add.bind(o);
boundedAdd2(2, 3)			// 105

在 setTimeout 中使用箭头函数

setTimeout 函数,使用一定封闭环境内的属性时,常用箭头函数作为回调函数。下面一个例子中:

  • loading 中箭头函数,绑定外部方法 loadingthis,指向 o 对象 o对象 o对象
  • loading2 中由 function 引导的声明式函数,将绑定全局(globalThis),指向 全局对象 全局对象 全局对象
  • setTimeout 不会影响内部箭头函数的 this 绑定,也不会影响内部普通函数的 this 绑定。
const o = {n: 0,loading () {setTimeout(() => {console.log(++this.n); // 箭头函数,this绑定声明所在上下文}, 1000)},loading2 () {setTimeout(function () {	console.log(++this.n); // 声明式函数,this绑定提升到全局}, 1000)},
}o.loading()		// 1秒后,控制台输出 1
o.loading()		// 再1秒后,控制台输出 2
o.loading2()	// 再1秒后,控制台输出 NaN 或其他

更一般的,在需要控制函数内 this 绑定指定区域时,采用箭头函数,一个例子如下:

const o = {n: 1,f() {let fn = function () { console.log(++this.n); }; // 声明式函数,this绑定提升到全局fn();},g() {let gn = () => { console.log(++this.n); };		// 箭头函数,this绑定声明所在上下文gn();},
}o.g()		// 2
o.f()		// NaN

不仅如此,箭头函数常出现在 promise 链中。或者说,箭头函数经常作为一个回调函数出现

没有 arguments 对象

箭头函数没有自己的 arguments 对象。类似 this 的绑定,箭头函数会使用上下文 / 外部的 arguments。下面一个例子中:

  • 内部箭头函数与外部函数 f 的参数隐式绑定;
  • arguments[0]f 的第一个参数 n
function f(n) {let g = () => arguments[0] + n; // f 的隐式参数绑定。arguments[0] 为 f 的第一个参数 nreturn g();
}f(3); // 3 + 3 = 6

JS 类没有默认的 arguments 字段,下面的例子中:

  • 全局箭头函数可以访问全局变量 arguments (如果存在);
  • 类可以自定义 arguments 字段并进行访问(使用 this 指定)。
globalThis.arguments = [1, 2, 3]
let f = () => { console.log(arguments[0]); }
class C {constructor(a, ...r) { this.arguments = [a, ...r]; };// arguments = [1, 2, 3];g = () => { console.log(this.arguments[0]); };
}f()						// 1
(new C(10, 1, 2)).g()	// 10

由于箭头函数的以上特性,在需要指定作用域的 this/arguments 时(setTimeout/Promise/闭包/装饰器/...),能够起到简化的作用。下面一个装饰器的例子中:

  • 内部箭头函数可以对外部函数的 thisarguments 访问,
function sayHi(name) { console.log(`Hello, ${name}!`); }function decorator1(fn, ms) {return function () {setTimeout(() => fn.apply(this, arguments), ms); }
}function decorator2(fn, ms) {return function (...args) {let nt = this;setTimeout(function() { return f.apply(nt, args); }, ms);}
}let f = decorator1(sayHi, 1000);
let g = decorator2(sayHi, 1000);
f('Lily');
g('Jack');

在大多情况下,使用剩余参比使用 arguments 是更好的选择

不能用作构造函数

  1. 箭头函数不能用作构造函数,当使用 new 调用时会出错。
const F = () => {this.a = 10;
}let f = new F()			// 报错,不能作为构造器
  1. 更不允许在箭头函数中使用 new.target
const G = (v) => {if (!new.target) return new G(v);	// 报错,不允许在箭头函数中出现 new.targetthis.k = v;
}

相关文章:

5.深入理解箭头函数 - JS

什么是箭头函数? 箭头函数是指通过箭头函数表达式创建的函数,是匿名函数。 箭头函数表达式的语法更简洁,但语义有差异,所以用法上也有一些限制。尽管如此,箭头函数依旧被广泛运用在需要执行“小函数”的场景。 箭头…...

高效的工作学习方法

1.康奈尔笔记法 在这里插入图片描述 2. 5W2H法 3. 鱼骨图分析法 4.麦肯锡7步分析法 5.使用TODOLIST 6.使用计划模板(年月周) 7. 高效的学习方法 成年人的学习特点: 快速了解一个领域方法 沉浸式学习方法: 沉浸学习的判据&am…...

【MySQL】-17 MySQL综合-3(MySQL创建数据库+MySQL查看数据库+MySQL修改数据库+MySQL删除数据库+MySQL选择数据库)

MySQL创建数据库查看数据库修改数据库删除数据库选择数据库 一 MySQL创建数据库实例1:最简单的创建 MySQL 数据库的语句实例2:创建 MySQL 数据库时指定字符集和校对规则 二 MySQL查看或显示数据库实例1:查看所有数据库实例2:创建并…...

【教学类-46-08】20240212立体鱼1.0

前期做了一个立体春字 作品展示 背景需求: 在南浔古镇的非遗文化馆里看到一个新年活动折纸——年年有鱼挂饰 我从网上搜索教程,完全可以用15*15的手工纸给孩子们做一套。 折纸教程 视频暂时不能查看https://haokan.baidu.com/v?pdwisenatural&vid1…...

【JVM篇】什么是jvm

文章目录 🍔什么是Java虚拟机🛸Java虚拟机有什么用🌹Java虚拟机的功能🎈Java虚拟机的组成 🍔什么是Java虚拟机 JVM指的是Java虚拟机,本质上是一个运行在计算机上的程序,可以运行 Java字节码文件…...

Vulnhub靶场 DC-9

目录 一、环境搭建 二、信息收集 1、主机发现 2、指纹识别 三、漏洞复现 1、dirsearch目录探测 2、sqlmap注入测试 3、文件包含漏洞 4、Knockd敲门服务 5、ssh爆破 ​​​​​​​6、提权 四、提取flag 一、环境搭建 Vulnhub靶机下载: 官网地址:https://…...

day2-理解 linux 云计算

1.解释服务器是什么; 服务器是一种高性能计算机,它的主要功能是提供计算服务和资源给其他计算机使用。在网络环境中,服务器扮演着重要的角色,它们可以存储和管理大量的数据,处理网络请求,提供应用程序运行…...

Android 13.0 开启禁用系统接收短信功能

1.概述 在13.0的系统rom定制化中,在一些wifi产品的机器中,对于系统4g部分的功能需要裁剪 比如拨打电话 接听电话 短信功能等这部分 需要禁用系统对应的功能,接下来就来初步分析下系统中接收短信部分功能,然后实现禁用接收短信功能 2.禁用和启用系统短信功能实现的核心类 …...

compile error ESP32cam.h no such file or directory

解决方法 可以参考这篇文章: But first, you will need to download the esp32cam.h library. For this go to Github and download the esp32cam Zip. GitHub - yoursunny/esp32cam: OV2640 camera on ESP32-CAM, Arduino library 具体就是下面的这篇重要的文章 …...

使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询

在我之前的文章 “Elasticsearch:与多个 PDF 聊天 | LangChain Python 应用教程(免费 LLMs 和嵌入)” 里,我详述如何使用 Streamlit,Langchain, Elasticsearch 及 OpenAI 来针对 PDF 进行聊天。在今天的文章中&#xf…...

Gitee的使用教程(简单详细)

1.安装git(我的电脑自带git,我没弄这步QAQ) Git (git-scm.com)https://git-scm.com/ 安装好后在桌面点击鼠标右键会出现git GUI 和 git Bash(没有的话点击显示更多选项) 2.去gitee上注册一个账号 工作台 - Gitee.co…...

生成树(习题)

模板】最小生成树 生成树有两种方法,但是我只会克鲁斯卡尔算法,所以接下来下面的的题目都是按照这个算法来实现的,首先来见一下生么是这个算法,在之前的我写的一篇博客中有题使叫修复公路,其实这一题就是使用了这个算…...

ARMv8-AArch64 的异常处理模型详解之异常处理概述Handling exceptions

异常处理模型详解之异常处理概述 一,异常处理相关概念二,异常处理概述 一,异常处理相关概念 在介绍异常处理之前,有必要了解一些关于异常处理状态的术语: 当处理器响应一个异常时,我们称该异常被获取了&a…...

Ubuntu 18.04上安装cuDNN 8.9.6.50:一站式指南

Content 一、前言二、准备工作三、安装步骤1. 启用本地仓库2. 导入CUDA GPG密钥3. 更新仓库元数据4. 安装运行时库5. 安装开发者库6. 安装代码示例7. 另外一种安装办法 四、验证安装1. 验证cuDNN版本2. 测试示例代码 五、总结 一、前言 在深度学习领域,高效的计算资…...

Microsoft Word 超链接

Microsoft Word 超链接 1. 取消超链接2. 自动超链接2.1. 选项2.2. 校对 -> 自动更正选项2.3. Internet 及网络路径替换为超链接 References 1. 取消超链接 Ctrl A -> Ctrl Shift F9 2. 自动超链接 2.1. 选项 2.2. 校对 -> 自动更正选项 ​​​ 2.3. Internet…...

SparkJDBC读写数据库实战

默认的操作 代码val df = spark.read.format("jdbc").option("url", "jdbc:postgresql://localhost:5432/testdb").option("user", "username").option("password", "password").option("driver&q…...

代码随想录 -- 数组

文章目录 二分查找题目描述题解 移除元素题目描述题解:暴力解法题解:双指针法 有序数组的平方题目描述题解:暴力解法题解:双指针法 长度最小的子数组题目描述题解:暴力解法题解:滑动窗口(双指针…...

【国产MCU】-CH32V307-基本定时器(BCTM)

基本定时器(BCTM) 文章目录 基本定时器(BCTM)1、基本定时器(BCTM)介绍2、基本定时器驱动API介绍3、基本定时器使用实例CH32V307的基本定时器模块包含一个16 位可自动重装的定时器(TIM6和TIM7),用于计数和在更新新事件产生中断或DMA 请求。 本文将详细介绍如何使用CH32…...

Node.js开发-fs模块

这里写目录标题 fs模块1) 文件写入2) 文件写入3) 文件移动与重命名4) 文件删除5) 文件夹操作6) 查看资源状态7) 相对路径问题8) __dirname fs模块 fs模块可以实现与硬盘的交互,例如文件的创建、删除、重命名、移动等,还有文件内容的写入、读取&#xff…...

探索Nginx:强大的开源Web服务器与反向代理

一、引言 随着互联网的飞速发展,Web服务器在现代技术架构中扮演着至关重要的角色。Nginx(发音为“engine x”)是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。Nginx因其卓越的性能、稳定性和灵活性&…...

相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…...

【从Python基础到深度学习】1. Python PyCharm安装及激活

前言: 为了帮助大家快速入门机器学习-深度学习,从今天起我将用100天的时间将大学本科期间的所学所想分享给大家,和大家共同进步。【从Python基础到深度学习】系列博客中我将从python基础开始通过知识和代码实践结合的方式进行知识的分享和记…...

片上网络NoC(3)——拓扑指标

目录 一、概述 二、指标 2.1 与网络流量无关的指标 2.1.1 度(degree) 2.1.2 对分带宽(bisection bandwidth) 2.1.3 网络直径(diameter) 2.2 与网络流量相关的指标 2.2.1 跳数(hop coun…...

二叉树 ---- 所有结点数

普通二叉树的结点数: 递归法: 对二叉树进行前序or后序遍历: typedef struct Tree {int data;Tree* leftChild;Tree* rightChild; }tree,*linklist; //计算普通二叉树的结点数 int nodenums(linklist node) {if(node nullptr) return 0; …...

步步深入 k8s 使用 pv pvc sc 在 nfs 基础上共享存储

博客原文 文章目录 前言集群环境nfs 环境搭建pod 挂载 nfs架构图 pvc 方式挂载 nfs架构图 storageclass 方式动态申请 pv架构图 参考 前言 持久化卷(Persistent Volume, PV)允许用户将外部存储映射到集群,而持久化卷申请(Persist…...

Stable Diffusion 模型下载:Disney Pixar Cartoon Type A(迪士尼皮克斯动画片A类)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十...

Modelsim10.4安装

简介(了解,可跳过) modelsim是Mentor公司开发的优秀的HDL语言仿真软件。 它能提供友好的仿真环境,采用单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术和单一内核仿真技术,编译仿真速…...

Java基于微信小程序的医院核酸检测服务系统,附源码

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...

VC++ 绘制折线学习

win32 有三个绘制折线的函数; Polyline,根据给定点数组绘制折线; PolylineTo,除了绘制也更新当前位置; PolyPolyline,绘制多条折线,第一个参数是点数组,第二个参数是一个数组、指…...

速盾:dns解析和cdn加速的区别与联系

DNS解析和CDN加速是两种不同的网络技术,但在网站访问过程中起到了相互协作的作用。 首先,DNS解析(Domain Name System)是将域名转换为IP地址的过程。当用户输入一个网址时,计算机会先向本地DNS服务器发送一个查询请求…...

C++ Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(3) 保存表格数据

对上两篇篇的工作C Qt框架开发| 基于Qt框架开发实时成绩显示排序系统(1)-CSDN博客和C Qt框架开发 | 基于Qt框架开发实时成绩显示排序系统(2)折线图显示-CSDN博客继续优化,增加一个保存按钮,用于保存成绩数据…...

ChatGPT 4:新特性与优势

ChatGPT 4:新特性与优势 一、引言 ChatGPT 4是一款备受瞩目的人工智能模型,它以其强大的语言生成能力和智能回答能力,为用户提供了更高效、更便捷的对话体验。为了能够充分享受ChatGPT 4的各项功能,本文将向您详细介绍其新特性&…...

【教程】MySQL数据库学习笔记(二)——数据类型(持续更新)

写在前面: 如果文章对你有帮助,记得点赞关注加收藏一波,利于以后需要的时候复习,多谢支持! 【MySQL数据库学习】系列文章 第一章 《认识与环境搭建》 第二章 《数据类型》 文章目录 【MySQL数据库学习】系列文章一、整…...

Servo的并发模型介绍

Servo是一个由Mozilla Research开发的实验性浏览器引擎,旨在为未来的网页和应用程序提供高性能的渲染。Servo的并发模型是其核心特点之一,它利用现代多核处理器的优势,通过异步编程和并行处理来提高渲染效率和响应性。以下是对Servo并发模型的…...

Vue3大事件项目(ing)

文章目录 核心内容1.大事件项目介绍2.大事件项目创建3.Eslint配置代码风格4.配置代码检查工作流问题: pnpm lint是全量检查,耗时问题,历史问题 5.目录调整6.vue-router4 路由代码解析7.引入 Element Plus 组件库8.Pinia 构建仓库 和 持久化9.Pinia 仓库统一管理 核心内容 Vue3…...

基于spring boot实现邮箱发送和邮箱验证

目录 一、邮箱发送实现1. 开通邮箱服务2. 添加邮箱依赖3.添加配置4.添加邮箱通用类5. 测试类 二、邮箱验证实现1.添加依赖2. 添加配置3.添加controller4. 测试 项目地址: https://gitee.com/nssnail/springboot-email 一、邮箱发送实现 1. 开通邮箱服务 使用qq邮箱、163邮箱都…...

华清作业day56

SQLite特性: 零配置一无需安装和管理配置;储存在单一磁盘文件中的一个完整的数据库;数据库文件可以在不同字节顺序的机器间自由共享;支持数据库大小至2TB;足够小,全部源码大致3万行c代码,250KB…...

【FPGA】VHDL:八段码到8421BCD码转换电路

目录 EDA设计基础练习题 : 实验要求如下: 代码 八段码到8421BCD码转换电路 8421BCD码到八段码转换电路 八段码到8421BCD~运行结果展示 8421BCD转八段码~运行结果展示 特别注意 软件:Quartus II 13.0 (64-bit) 语言:VHDL E…...

docker安装、运行

1、安装 之前有docker的话,需要先卸载旧版本: sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装之前需要安装yum工具: sud…...

新型RedAlert勒索病毒针对VMWare ESXi服务器

前言 RedAlert勒索病毒又称为N13V勒索病毒,是一款2022年新型的勒索病毒,最早于2022年7月被首次曝光,主要针对Windows和Linux VMWare ESXi服务器进行加密攻击,到目前为止该勒索病毒黑客组织在其暗网网站上公布了一名受害者&#x…...

qt-C++笔记之判断一个QLabel上有没有load图片

qt-C笔记之判断一个QLabel上有没有load图片 code review! 在Qt框架中,QLabel是用来显示文本或者图片的一个控件。如果你想判断一个QLabel控件上是否加载了图片,你可以检查它的pixmap属性。pixmap属性会返回一个QPixmap对象,如果没有图片被加…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Menu组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Menu组件 以垂直列表形式显示的菜单。 子组件 包含MenuItem、MenuItemGroup子组…...

vue三种路由守卫详解

在 Vue 中,可以通过路由守卫来实现路由鉴权。Vue 提供了三种路由守卫:全局前置守卫、全局解析守卫和组件内的守卫。 全局前置守卫 通过 router.beforeEach() 方法实现,可以在路由跳转之前进行权限判断。在这个守卫中,可以根据用…...

【Linux】线程概念和线程控制

线程概念 一、理解线程1. Linux中的线程2. 重新定义线程和进程3. 进程地址空间之页表4. 线程和进程切换5. 线程的优点6. 线程的缺点7. 线程异常8. 线程用途9. 线程和进程 二、线程控制1. pthread 线程库(1)pthread_create()(2)pth…...

maven创建webapp+Freemarker组件的实现

下载安装配置maven Maven官方版下载丨最新版下载丨绿色版下载丨APP下载-123云盘123云盘为您提供Maven最新版正式版官方版绿色版下载,Maven安卓版手机版apk免费下载安装到手机,支持电脑端一键快捷安装https://www.123pan.com/s/9QRqVv-TcUY.html链接为3.6.2-3.6.3的版本 下载解…...

Stable Diffusion 模型下载:Samaritan 3d Cartoon SDXL(撒玛利亚人 3d 卡通 SDXL)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十...

Oracle系列之十:Oracle正则表达式

Oracle正则表达式 1. 基本语法2. POSIX字符类3. 正则表达式函数4. 常用正则表达式 正则表达式 (Regular expression) 是一种强大的文本处理工具,Oracle数据库自9i版本开始引入了正则表达式支持,可帮助开发者快速而准确地匹配、查找和替换字符串&#xff…...

php基础学习之运算符(重点在连接符和错误抑制符)

运算符总结 在各种编程语言中&#xff0c;常用的运算符号有这三大类&#xff1a; 算术运算符&#xff1a;&#xff0c;-&#xff0c;*&#xff0c;/&#xff0c;%位运算符&#xff1a;&&#xff0c;|&#xff0c;^&#xff0c;<<&#xff0c;>>赋值运算符&…...

【CC工具箱1.2.0】更新_免费无套路,60+个工具,原码放出

CC工具箱目前已经更新到1.2.0版本&#xff0c;完全免费无套路。 适用版本ArcGIS Pro 3.0及以上。 欢迎大家使用&#xff0c;反馈bug&#xff0c;以及提出需求和意见&#xff0c;时间和能力允许的话我会尽量满足要求。 如有关于工具的使用问题和需求建议&#xff0c;可以加下…...

Java 将TXT文本文件转换为PDF文件

与TXT文本文件&#xff0c;PDF文件更加专业也更适合传输&#xff0c;常用于正式报告、简历、合同等场合。项目中如果有使用Java将TXT文本文件转为PDF文件的需求&#xff0c;可以查看本文中介绍的免费实现方法。 免费Java PDF库 本文介绍的方法需要用到Free Spire.PDF for Java…...