前端系列11集-ES6 知识总结

news2024/11/27 18:48:59

outside_default.png

ES Module

优点

静态分析
浏览器和 Node 都支持
浏览器的新 API 能用模块格式提供
不再需要对象作为命名空间

export

用于规定模块的对外接口
输出的接口与其对应的值是动态绑定关系
	可以取到模块内部实时的值

import

用于输入其他模块提供的功能
具有提升效果,会提升到整个模块的头部,首先执行
静态执行不能使用表达式和变量
多次重复执行同一句 import 语句只会执行一次

import()

支持动态加载模块
适用场合
	按需加载
	条件加载
	动态的模块路径

ES6 模块与 CommonJS 模块

CommonJS 模块输出的是一个值的拷贝

ES6 模块输出的是值的引用

CommonJS 模块是运行时加载

ES6 模块是编译时输出接口

CommonJS 加载的是一个对象该对象只有在脚本运行完才会生成;ES6 模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成

CommonJS 模块的 require() 是同步加载模块 ES6 模块的import命令是异步加载,有一个独立的模块依赖的解析阶段

加载

CommonJS 的 require() 命令不能加载 ES6 模块,只能使用 import() 这个方法加载
ES6 模块的import命令可以加载 CommonJS 模块,但是只能整体加载,不能只加载单一的输出项

Class 类

本质

一个语法糖,实质依然是函数
只是让对象原型的写法更加清晰、更像面向对象编程的语法

静态方法

static 关键字
该方法不会被实例继承,直接通过类来调用
静态方法中的 this 指向类本身,而不是实例

静态属性

Class 本身的属性

私有方法和私有属性

只能在类的内部访问的方法和属性

new.target 属性

用在构造函数之中,返回 new 命令作用于那个构造函数
可以用来确定构造函数是怎么调用的
Class 内部调用 new.target,返回当前 Class
子类继承父类时,new.target 会返回子类
在函数外部,使用 new.target 会报错

继承

通过 extends 关键字实现继承,让子类继承父类的属性和方法

限制

子类必须在 constructor() 方法中调用 super()
不调用 super() 方法子类就得不到自己的 this 对象

Object.getPrototypeOf()

用来从子类上获取父类

super 关键字

作为函数调用时,代表父类的构造函数

作为函数时只能用在子类的构造函数之中

作为对象时

在普通方法中指向父类的原型对象
在静态方法中指向父类

类的 prototype 属性和 __proto__ 属性

子类的 __proto__ 属性,表示构造函数的继承,总是指向父类
子类prototype属性的__proto__属性,表示方法的继承,总是指向父类的prototype属性

实例的 __proto__ 属性

指向父类实例的__proto__属性

	子类的原型的原型,是父类的原型

Promise

是异步编程的一种解决方案

特点

对象的状态不受外界影响
        三种状态
                pending(进行中)
                fulfilled(已成功)
                rejected(已失败)
状态不可逆:一旦状态改变,就不会再变
        从 pending 变为 fulfilled
        从 pending 变为 rejected
链式调用

缺点

无法取消
        一旦新建它就会立即执行,无法中途取消
如果不设置回调函数,Promise 内部抛出的错误,不会反应到外部
当处于 pending 状态时,无法得知目前进展到哪一个阶段

实例方法

Promise.prototype.then()
        用于实例添加状态改变时的回调函数(可选)会返回的是一个新的 Promise 实例
                第一个参数是resolved状态的回调函数
                第二个参数是rejected状态的回调函数
Promise.prototype.catch()
        用于指定发生错误时的回调函数
Promise.prototype.finally() (ES2018)
        用于指定不管 Promise 对象最后状态如何都会执行的操作
        本质上是 then 方法的特例

静态方法

Promise.resolve()
    将现有对象转为 Promise 对象
            参数是一个 Promise 实例
                    直接返回该实例
            参数是一个thenable对象(具有 then 方法的对象)
                    转为 Promise 对象立即执行 thenable 对象的 then() 方法
            参数不是具有 then() 方法的对象或根本就不是对象
                    原始值和不具有 then() 方法的对象
                            返回一个 resolved 状态的新 Promise 对象
            不带有任何参数
                    返回一个 resolved 状态的新 Promise 对象

    Promise.reject()
	返回一个 rejected 状态的新 Promise 对象
Promise.all()
	将多个 Promise 实例,包装成一个新的 Promise 实例,
            只有所有的 Promise 状态成功才会成功,如果其中一个 Promise 的状态失败就会失败
Promise.race()
	将多个 Promise 实例,包装成一个新的 Promise 实例,
            新的 Promise 实例状态会根据最先更改状态的 Promise 而更改状态
Promise.allSettled()(ES2020)
	将多个 Promise 实例,包装成一个新的 Promise 实例,
            新的 Promise 实例只有等到所有这些参数实例都返回结果,
            不管是 resolved 还是 rejected ,包装实例才会结束,
            一旦结束,状态总是 resolved
Promise.any()(ES2021)
	将多个 Promise 实例,包装成一个新的 Promise 实例,
            只要参数实例有一个变成 resolved 状态,
            包装实例就会变成 resolved 状态;
            如果所有参数实例都变成 rejected 状态,包装实例就会变成 rejected 状态

异步编程

Generator 函数

是 ES6 提供的一种异步编程解决方案
一个状态机,封装了多个内部状态
特征
	function 关键字与函数名之间有一个星号
	函数体内部使用 yield 表达式,定义不同的内部状态

async 函数(ES2017)

特征
	是 Generator 函数的语法糖
	function 关键字前添加 async
	函数体内部使用 await 表达式
对 Generator 函数的改进
	内置执行器
	更好的语义
	更广的适用性
	返回值是 Promise
使用注意点
	把 await 命令放在 try...catch 代码块中
	多个 await 命令后面的异步操作,如果不存在继发关系,最好同时触发。
	await 命令只能用在 async 函数之中

对象

简洁表示法

引用变量时可以简写
方法省略 function 关键字
	简写的对象方法不能用作构造函数

属性名表达式

obj['a' + 'bc'] = 123

属性的遍历

for...in
	遍历对象自身的和继承的可枚举属性,不含 Symbol 属性
Object.keys
	返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名
Object.getOwnPropertyNames
	返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名
Object.getOwnPropertySymbols
	返回一个数组,包含对象自身的所有 Symbol 属性的键名
Reflect.ownKeys
	返回一个数组,包含对象自身的(不含继承的)所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举
首先遍历所有数值键,按数值升序排列其次遍历所有字符串键,按加入时间升序排列最后遍历所有 Symbol 键,按加入时间升序排列

super 关键字

指向当前对象的原型对象,只能用在对象的方法之中使用

扩展运算符

取出参数对象的所有可遍历属性
	等同于 Object.assign 方法

Object.is

比较两个值是否相等
	和全等运算符基本一致
            只有 +0 不等于 -0 和 NaN 等于自身处理不同

Object.assign

用于对象的合并将源对象的所有可枚举属性复制到目标对象
	参数处理
		只有一个参数时直接返回该参数
		参数不是对象会先转成对象然后返回
		第一个参数为 undefined 和 null 时会报错
	注意点
		浅拷贝
		同名属性会被替换
		处理数组时会把数组视为对象
		只能进行值的复制如果复制的值是一个取值函数,会求值后再复制
	用途
		为对象添加属性
		为对象添加方法
		克隆对象
		合并多个对象
		为属性指定默认值

Object.getOwnPropertyDescriptors

返回指定对象所有自身属性(非继承属性)的描述对象

Object.getPrototypeOf

用来获取一个对象的原型对象

Object.setPrototypeOf

用来设置一个对象的原型对象并返回参数对象

遍历

Object.keys
	获取参数对象自身的所有可遍历属性的键名
Object.values
	获取参数对象自身的所有可遍历属性的键值
Object.entries
	获取参数对象自身的所有可遍历属性的键值对数组
都不含继承的属性都会过滤属性名为 Symbol 值的属性

Object.fromEntries

是 Object.entries 的逆操作将一个键值对数组转为对象

Iterator

是一种接口,为各种不同的数据结构提供统一的访问机制

作用

为各种不同的数据结构提供统一的访问机制
使数据结构的成员能够按某种次序排列
供 for...of 循环消费

遍历过程

创建一个指针对象,指向当前数据结构的起始位置
第一次调用指针对象的 next 方法,指针指向数据结构的第一个成员
第二次调用指针对象的 next 方法,指针指向数据结构的第二个成员
不断调用指针对象的next方法,直到它指向数据结构的结束位置

next 方法

返回一个对象
value 属性返回当前位置的成员
done 属性是一个布尔值,表示遍历是否结束

原生具备 Iterator 接口的数据结构

Array
Map
Set
String
TypedArray
函数的 arguments 对象
NodeList 对象

对象没有 Iterator 接口

因为对象的哪个属性先遍历,哪个属性后遍历是不确定的,需要开发者手动指定

for...of 循环

内部调用的是数据结构的 Symbol.iterator 方法

数组

扩展运算符

将一个数组转为用逗号分隔的参数序列

Array.of

将一组值,转换为数组
	弥补数组构造函数 Array 的不足

Array.from

将两类对象转为真正的数组
	类似数组的对象(array-like object)
		DOM 操作返回的 NodeList
		arguments
	和可遍历(iterable)的对象
第二个参数类似数组的map方法
将字符串转为数组能正确处理各种 Unicode 字符

copyWithin

在当前数组内部将指定位置的成员复制到其他位置(会覆盖原有成员),然后返回当前数组

查找

find
	找出第一个符合条件的数组成员
	未找到返回 undefined
findIndex
	返回第一个符合条件的数组成员的位置
	未找到返回 -1
includes
	表示数组是否包含给定的值
	返回布尔值

fill

使用给定值填充一个数组

遍历

keys
	对键名的遍历
values
	对键值的遍历
entries
	对键值对的遍历
都返回一个遍历器对象可以用 for...of 循环

flat

将嵌套的数组拍平 默认拍平一层

flatMap

先对原数组的每个成员执行 map 再对返回值组成的数组执行 flat 方法
	只能拍平一层数组

at

返回参数对应位置的成员支持负索引 倒数的位置
超出范围返回 undefined

let 和 const

相同点

不存在变量提升

暂时性死区 变量在声明之前都是不可用的

不允许重复声明

块级作用域 块级作用域之中的函数声明语句类似于 let,在块级作用域之外不可引用

let 可以修改

const 不可修改 基本类型保证值不可变等同于常量 引用类型保证内存指针不可变

Symbol

新的原始数据类型,表示独一无二的值

注意点

Symbol 函数前不能使用 new 命令

Symbol 函数的参数只是表示对当前 Symbol 值的描述,相同参数的 Symbol 函数的返回值是不相等的

Symbol 值不能与其他类型的值进行运算

Symbol 值可以显式转为字符串和布尔值

内置的 Symbol 值

Proxy 代理器

在目标对象之前架设一层拦截,外界对该对象的访问,都必须先通过这层拦截

实例方法

返回一个可取消的 Proxy 实例 Proxy.revocable()

在 Proxy 代理的情况下,目标对象内部的 this 会指向 Proxy 代理

this 问题 在 Proxy 代理的情况下,目标对象内部的 this 会指向 Proxy 代理

函数

参数支持默认值

rest 参数 获取函数的多余参数,只能在最后一个

length 属性 不包括设置了默认值的参数 不包括 rest 参数

name 属性 返回该函数的函数名

箭头函数

特点

没有自己的 this 对象 不能用 call apply bind

不可以当作构造函数 不能使用 new

不可以使用 arguments 对象 用 rest 参数代替

不可以用作 Generator 函数 不能使用 yield

应用 简化和封装回调函数

不适用场合

定义对象的方法且该方法内部需要 this

需要动态 this

允许函数最后一个参数有尾逗号

字符串

模板字符串

可以当作普通字符串使用

用来定义多行字符串 所有的空格和缩进都会被保留

可以在字符串中嵌入任意的 JavaScript 表达式函数等

支持嵌套

标签模板 函数的特殊调用形式

alert`hello` => alert(['hello'])

新增方法

String 对象String.fromCodePoint从 Unicode 码点返回对应字符String.raw用于模板字符串的处理

String 实例

codePointAt 返回一个字符的码点 能够正确处理 4 个字节储存的字符 可测试一个字符由两个字节还是由四个字节组成

normalize Unicode 正规化,用来将字符的不同表示方法统一为同样的形式

查找字符

includes 表示是否找到了参数字符串

startsWith 表示参数字符串是否在原字符串的头部

endsWith 表示参数字符串是否在原字符串的尾部

repeat 返回一个将原字符串重复 n 次的新字符

padStart 头部补全

padEnd 尾部补全

replaceAll 一次性替换所有匹配 第二个参数支持特殊字符匹配

$&:匹配的字符串
$` :匹配结果前面的文本
$':匹配结果后面的文本
$n:匹配成功的第n组内容,n是从1开始的自然数(第一个参数必须是正则表达式)
$$:指代美元符号$

at 返回参数指定位置的字符 支持负索引 倒数的位置 超出范围返回 undefined

Reflect

概述

从 Reflect 对象上可以拿到语言内部的方法

修改某些 Object 方法的返回结果,让其变得更合理

让 Object 操作都变成函数行为

静态方法

数值

二进制和八进制表示法

二进制用前缀 0b 或 0B 表示

八进制用前缀 0o 或 0O 表示

数值分隔符

使用下划线 _ 作为分隔符,没有指定间隔的位数
注意点
        不能放在数值的最前面或最后面
        不能同时两个或两个以上的分隔符
        小数点的前后不能有分隔符
        科学计数法里面表示指数的 e 或 E 前后不能使用

Number 对象新增方法

Number.isFinite
	检查一个数值是否有限的,即不是 Infinity
Number.isNaN
	检查一个值是否为 NaN
Number.parseInt
	解析一个字符串,并返回一个整数
Number.parseFloat
	解析一个字符串,并返回一个浮点数
Number.isInteger
	判断一个数值是否为整数
		受 IEEE 754 标准限制超出 JS 安全数范围会误判

都是从全局方法上移植过来的

只返回第一个数字

允许开头和结尾空格

第一个字符不能被转换为数字 时返回 NaN

Number.EPSILON

常量表示 1 与大于 1 的最小浮点数之间的差

JavaScript 能够表示的最小精度

安全整数

Number.MAX_SAFE_INTEGER
	表示在 JavaScript 中最大的安全整数2 的 53 次方 - 1
Number.MIN_SAFE_INTEGER
	表示在 JavaScript 中最小的安全整数字-(2 的 53 次方 - 1)
Number.isSafeInteger
	判断一个整数是否为安全整数

Math 对象的扩展

BigInt 数据类型

表示整数,可以精确表示任何位数的整数
注意点
	BigInt 函数必须有参数且参数必须可以转为数值,否则会报错
	BigInt 不能与普通数值进行混合运算
	BigInt 与其他类型可以使用比较和相等运算符

新的数据结构Set 和 Map

Set

类似于数组成员的值都是唯一的
Set 函数可以接收一个数组用于初始化

实例属性
	Set.prototype.size
		返回 Set 实例的成员总数
实例方法
	Set.prototype.add(value)
		添加某个值返回 Set 实例本身
	Set.prototype.delete(value)
		删除某个值返回一个布尔值表示删除是否成功
	Set.prototype.has(value)
		返回一个布尔值表示该值是否为 Set 的成员
	Set.prototype.clear()
		清除所有成员没有返回值
遍历方法遍历顺序为插入顺序
        Set.prototype.keys()
                返回键名的遍历器
        Set.prototype.values()
                返回键值的遍历器
        Set.prototype.entries()
                返回键值对的遍历器
        Set.prototype.forEach()
                使用回调函数遍历每个成员
        Set 结构没有键名,只有键值keys 方法和 values 方法的行为完全一致

WeakSet

WeakSet 结构与 Set 类似都是不重复的值的集合
注意点
        成员只能是对象不能是其他类型,否则会报错
        WeakSet 中的对象都是弱引用 垃圾回收机制不考虑 WeakSet 对该对象的引用
        WeakSet 不能遍历
实例方法
        WeakSet.prototype.add(value)
        WeakSet.prototype.delete(value)
        WeakSet.prototype.has(value)

WeakRef (ES2021) 创建对象的弱引用

Map

类似于对象是键值对的集合键的值可以是各种类型的值(包括对象)
Map 构造函数接收一个二维数组作为参数
实例属性
        Map.prototype.size
                返回 Map 结构的成员总数
实例方法
        Map.prototype.set(key, value)
                设置键名 key 对应的键值为 value 并返回 Map 实例
        Map.prototype.get(key)
                读取key对应的键值,找不到时返回 undefined
        Map.prototype.has(key)
                返回一个布尔值表示 key 是否在当前 Map 实例中
        Map.prototype.delete(key)
                删除某个 key 返回一个布尔值表示删除是否成功
        Map.prototype.clear()
                清除所有成员没有返回值
        遍历方法 遍历顺序为插入顺序
                Map.prototype.keys()
                        返回键名的遍历器
                Map.prototype.values()
                        返回键值的遍历器
                Map.prototype.entries()
                        返回所有成员的遍历器
                Map.prototype.forEach()
                        遍历 Map 的所有成员

WeakMap

WeakMap结构与Map结构类似都是键值对的集合
注意点
	只接受对象作为键名(null 除外)
	WeakMap 键名所指向的对象不计入垃圾回收机制
	WeakMap 弱引用的只是键名,键值是正常引用
	WeakMap 没有遍历操作
实例方法
	WeakMap.prototype.set(key, value)
		设置键名 key 对应的键值为 value 并返回 WeakMap 实例
	WeakMap.prototype.get(key)
		读取key对应的键值,找不到时返回 undefined
	WeakMap.prototype.has(key)
		返回一个布尔值表示 key 是否在当前 WeakMap 实例中
	WeakMap.prototype.delete(key)
		删除某个 key 返回一个布尔值表示删除是否成功

运算符

指数运算符 ** (ES2016)
	右结合 从最右边开始计算
链判断运算符 ?. (ES2020)
Null 判断运算符 ??(ES2020)
逻辑赋值运算符 (ES2021)
	或赋值运算符 ||=
		x ||= y 等同于 x || (x = y)
	与赋值运算符 &&=
		x &&= y 等同于 x && (x = y)
	Null 赋值运算符 ??=
		x ??= y 等同于 x ?? (x = y)
只有运算符左侧的值为 null 或 undefined 时 才会继续右侧的运算

加群联系作者vx:xiaoda0423

仓库地址:https://github.com/webVueBlog/WebGuideInterview

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/474783.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

刷题4.28

1、 开闭原则软件实体(模块,类,方法等)应该对扩展开放,对修改关闭,即在设计一个软件系统模块(类,方法)的时候,应该可以在不修改原有的模块(修改关…

服务注册与发现-Consul(Linux)

本文要有docker支持,docker的安装使用Docker 在Linux-CentOS上的安装使用_XiaoGuaiSs的博客-CSDN博客如果提示 [Warning] IPv4 forwarding is disabled. Networking will not work.然后将项目拷贝至linux 的project目录下(随意)。生成项目镜像…

Node第三方包 【Request】

文章目录 🌟前言🌟Request🌟安装与使用🌟流(stream)操作🌟Form表单🌟application/x-www-form-urlencoded (URL编码的Form)🌟multipart/form-data (Multipart Form 上传) …

百度地图采集经纬度坐标数据定位的javascript实战开发(地理坐标拾取系统、地址定位点选插件、实时定位、数据导入、地理编码、位置纠偏)

坐标采集 前言1.百度地图地理坐标拾取系统2.位置选择插件百度地图经纬度选择插件默认参数配置 3.数据导入4.地理编码爬取百度webAPI返回参数前端封装转换函数 5.手机GPS定位GPS定位 6.位置纠偏html容器经纬度纠偏 前言 在百度地图的标注开发中,最为关键的操作就是经…

华硕主板来电开机自启

重启电脑,开机按del或者F2进入bios 按F10保存确认即可

浏览器跨站点通信(两个IP不同网站通信)

需求场景:OA系统会通过接口调用的方式将ERP系统的待办信息获取并显示在OA系统中。登录OA系统后,在OA系统中点击ERP系统的待办,会自动打开ERP系统业务处理页面,当ERP系统对应业务处理完毕,需要在OA系统中刷新待办记录&a…

【环境配置】解决No module named ‘librosa‘

执行以下命令下载 pip install librosa我这里遇到了报错: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools”: https://visualstudio.microsoft.com/visual-cpp-build-tools/ 相关解决方案请参考: 【环境配置…

Python渗透测试编程基础——线程、进程与协程

目录 一、进程与线程的概念 1.进程 2.线程 3.进程和线程的关系 4.任务执行方式 二、Python中的Threading模块 1.线程模块介绍 2.Threading介绍 (1)方法和属性 (2)类方法 三、线程简单编写 1.流程 2.创建线程 &#x…

云原生技术在云计算中的应用探讨

第一章:云原生技术的概念与发展 云原生技术是一种针对云计算环境设计的应用程序开发和部署方法,主要目标是提高应用程序的可伸缩性、可移植性、高可用性和自动化管理等方面的特性。这种技术是近年来在云计算领域兴起的一个新的开发模式,它主要…

大模型“涌现”的思维链,究竟是一种什么能力?

听说最近AI大厂的开发人员和高校的NLP研究人员,都在琢磨,怎么让大模型“涌现”。那画面莫名就让我想到了程序员给服务器上香来保佑不宕机,都有种求诸于天的玄学。 所谓“涌现”,在大模型领域指的是当模型突破某个规模时,性能显著提…

商城管理系统的数据表从属关系+navicat建表操作+数据库文件转储并入代码操作

1&#xff0c;商城管理系统的数据表从属关系 在商城管理系统中&#xff0c;我们会面临属性分组的问题&#xff0c;商品表与分类表需要建立链接&#xff1b; 在控制类中我们将分类表中属性类传过来&#xff0c;与商品值params建立链接 public R list(RequestParam Map<Strin…

基于matlab使用波束成形对点对点 MIMO-OFDM 系统进行建模

一、前言 此示例展示了如何使用波束成形对点对点 MIMO-OFDM 系统进行建模。最近的无线标准&#xff08;如 802.11x 系列&#xff09;采用了多输入多输出 &#xff08;MIMO&#xff09; 和正交频分复用 &#xff08;OFDM&#xff09; 技术的组合&#xff0c;以提供更高的数据速率…

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 2 (传统机器学习方法如何选择)...

万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 1 传统的机器学习 我们现在讨论几种关键的机器学习方法的优势和劣势。表1显示了不同机器学习方法的比较。我们首先讨论不基于神经网络的方法&#xff0c;有时被称为“传统机器学习”。 图3显示了一些传统的机器学习方法…

【算法基础】常见排序算法(持续更新中)

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵 希望大佬指点一二 如果文章对你有…

【KVM虚拟化】· 图形化KVM安装linux

目录 &#x1f341;虚拟化技术 &#x1f342;KVM的整体结构 &#x1f342;KVM 的功能列表 &#x1f342;KVM 工具集合 &#x1f341;安装kvm虚拟化功能 &#x1f341;创建虚拟机 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;KVM虚拟化…

FreeRTOS 信号量(二) ------ 计数型信号量

文章目录 一、计数型信号量1. 计数型信号量简介2. 创建计数型信号量①函数 xSemaphoreCreateCounting()②函数 xSemaphoreCreateCountingStatic() 3. 计数型信号量创建过程分析4. 释放和获取计数信号量 二、计数型信号量操作实验 一、计数型信号量 1. 计数型信号量简介 有些资…

数据结构与算法(小议递归)

文章目录 前言一、递归是什么&#xff1f;二、在什么时候适用递归1.测试一下 总结 前言 递归是一种常用的算法设计&#xff0c;递归就是一种循环推理。简单来说就是调用原算法本身的算法。 这里主要探讨递归的使用&#xff0c; 一、递归是什么&#xff1f; 用一个简单的例子来…

嵌入式代码查看分析利器---Understand

平时在开发嵌入式程序的时候大多数使用的都是keil软件&#xff0c;一般小的工程使用keil没感觉到有什么问题&#xff0c;但是当工程比较大的时候&#xff0c;比如移植了FreeRTOS系统或者LWIP网络系统时&#xff0c;代码全部编译一次就要花费很长世间&#xff0c;特别是开启了点…

CIKM论文解读 | 淘宝内容化推荐场景下对多场景全域表征的思考与应用

我们结合逛逛推荐场景中的具体问题&#xff0c;从多场景全域表征的视角进行了一系列的探索与内容推荐场景的应用&#xff0c;从全域表征的范围、信息迁移方式以及模型框架的应用等维度展开我们的优化工作&#xff0c;取得了阶段性的优化经验和业务效果。 背景介绍 淘宝逛逛自20…

鸿蒙混合打包。在现有安卓应用的基础上扩展鸿蒙的特性,以最快的速度布局鸿蒙生态!

鸿蒙混合打包 介绍 鸿蒙混合打包。在现有安卓应用的基础上扩展鸿蒙的特性&#xff0c;以最快的速度布局鸿蒙生态&#xff01; 参考&#xff1a;京东APP鸿蒙版上架实践。本项目只是这篇文章的一个验证&#xff0c;让更多的兄弟们可以少走弯路。 我尽可能把每一步的改动作为一…