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

JavaScript 最佳实践

我只选取了我还没完全贯彻的条目罗列如下.

1.函数命名
函数名由动词开头,如getName();

2.布尔类型命名
若函数返回布尔值,则函数名以is/can等开头.

3.常量命名约定
常量名全大写并以下划线""连接.

4.变量类型透明化
定义变量时,应将其立即初使化为一个与其同类型的值,因为在开头集中声明变量时应能表示出变量类型.

let name = null;
改为
let name ="";

5.函参类型透明化
通过指定默认参数的方式为函数参数标明类型
function(namne)x function(name="")√

6.事件处理耦合
事件处理逻辑不应与应用逻辑耦合,应在事件处理逻辑中调用对应应用逻辑,而非应用逻缉写在事件处理器内。事件处理器内仅做与事件对象相关工作.事件对象不应整体传入应用逻辑.

7.字面量
所有使用次数超一次的字面量,都应存于常量,使用常量,以防A处改了B处却未改而报错.

8.全局查找
访问当前作用域外部变量所需时间随作用域链中作用域数量增加而呈现线性增长,由起始作用域到某个外层用域之间的作用域越多,需查找的时间越长.最大的作用域document则需遍历作用域链,用时最多.通过在局部作用域中保存对外部变量的引用,则仅创建引用时有一次较广的查找效率O(n),此后使用该引用效率为O(1);
如下例

const target = { foo: bar }
const handler = {
get:(target,property, receiver)=>{
console.log('get');
const proxy= new Proxy(target, handler);
function doEnumr1(){	
let i= 100;	let pf = proxy.foo;	
do {	
console.log(`i: ${proxy.foo}`);	
}while(--i>0);	
}
function doEnumr2(){
let j =5;
do{
console.log (`i:${proxy.foo}`);	
}while(--j>0);	
}
//get, i get, i...
//get, i, i, i...

9.访问数组元素的效率=访问变量效率,均为O(1);
访问变量或者数字的效率高于访问对象效率,因为查属性名要查作用域链,能用数组索引便不使用对象.

10.优化循环
有时可以用反向的思维去处理数据,比如你要从数组中剔除的元素占大部分,那不如去筛选小部分符合条件的元素出来.
终止条件要尽可能好算,尽可能少O(n),一满足条件就退出.
简化循环体,能不在循环做的就不在循环做.
尽量使用后测试循环,先做再判定,比如do while替代for,避免初始就对终止条件评估.
能在一个循环里做的就不要拆成好几个,有时为了代码结构可能会拆,这会导致O(n)增多(比如arr.length增多了)
循环结构中减少对效率为O(n)值的访问.
遍历数组时选择反向遍历加后测试循环这套方案可以很大程度上提速.反向循环你不用再反复访问xx.length这个O(n)变量.

for(i=0;i<x.length;i++)

改为

for(i=x.length;i>=0;i--)

从999个O(n)到一个O(n).
再将以上改为后测试循环:

let i = x.length;
if(i > -1){
do{
xx
}while(--i >= 0)
}

11.原生api
尽可能使用原生方法,作为一门解释型语言,由C/C++构建,原生绝对比自己用js搭的东西快.

12.优化判定大量的连续判定用卫语句可以提高可读性,用switch可以提高效率(因为它不会挨个过终止条件).

13.链式语句比多句效率高.

14.迭代性的值放进语句里,不要拆为单句:

let name = val[i];
i+p;

改为

let name = val[i++];

相关文章:

JavaScript 最佳实践

我只选取了我还没完全贯彻的条目罗列如下. 1.函数命名 函数名由动词开头,如getName(); 2.布尔类型命名 若函数返回布尔值,则函数名以is/can等开头. 3.常量命名约定 常量名全大写并以下划线""连接. 4.变量类型透明化 定义变量时,应将其立即初使化为一个与其同类型…...

Rust配置笔记

1.Node.js下载配置 2.c环境配置 C我是用vs装的点击这个installer 点击修改 选择C环境就行,这个时候它就帮忙配置环境了 3.Rust下载配置 4.装napi-rs框架 npm install -g napi-rs/cliRust下载网站 下完之后直接打开 一开始下包会比较慢,多等等 下好之后跑项目前第一件事配置…...

大模型WebUI:Gradio全解12——LangChain原理及agents构建Gradio UI(1)

大模型WebUI:Gradio全解12——LangChain原理及agents构建Gradio UI(1) 前言本篇摘要12. LangChain原理及其agent构建Gradio UI12.1 LangChain介绍12.1.1 概念12.1.2 用途12.1.3 文档参考文献前言 本系列文章主要介绍WEB界面工具Gradio。Gradio是Hugging Face发布的简易WebU…...

具有整合各亚专科医学领域知识能力的AI智能体开发纲要(2025版)

整合各亚专科医学领域知识能力的AI代理的开发与研究 一、引言 1.1 研究背景 在科技飞速发展的当下,人工智能(AI)已成为推动各行业变革的关键力量,医疗领域也不例外。近年来,AI 在医疗行业的应用取得了显著进展,从医学影像诊断到疾病预测,从药物研发到个性化医疗,AI 技…...

机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解

机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解 目录 引言 脑卒中的全球影响机器学习在医疗预测中的挑战类别不平衡问题的核心痛点数据预处理与特征选择 数据来源与清洗缺失值处理方法类别特征编码特征选择技术处理类别不平衡的四大方法 SMOTE(合成少数类过采样技术…...

数据表的存储过程和函数介绍

文章目录 一、概述二、创建存储过程三、在创建过程中使用变量四、光标的使用五、流程控制的使用六、查看和删除存储过程 一、概述 存储过程和函数是在数据库中定义的一些SQL语句的集合&#xff0c;然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存储过程和函数可…...

为AI聊天工具添加一个知识系统 之117 详细设计之58 思维导图及观察者效应 之2 概念全景图

&#xff08;说明&#xff1a;本文和上一篇问题基本相同&#xff0c;但换了一个模型 deepseek-r1&#xff09; Q1227、在提出项目“为使用AI聊天工具的聊天者加挂一个专属的知识系统”后&#xff0c;我们已经进行了了大量的讨论-持续了近三个月了。这些讨论整体淋漓尽致体现了…...

Error [ERR_REQUIRE_ESM]: require() of ES Module

报错信息&#xff1a; 【报错】Message.js 导入方式不对&#xff0c;用的是 ES Moudle 的语法&#xff0c;提示使用 import 引入文件 项目开发没有用到 js-message 依赖&#xff0c;是 node-ipc 依赖中用到的 js-message 依赖&#xff0c; node-ipc 中限制 js-message 版本&a…...

GStreamer源码安装1.24版本

从官网下载 1.24的源码包 https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/1.24?ref_typeheads#getting-started &#xff0c;尝试过使用git clone 的方式&#xff0c;但速度贼慢&#xff0c;就选择了下载源码包的方式安装依赖 sudo apt install libssl-dev g me…...

从CNN到Transformer:遥感影像目标检测的未来趋势

文章目录 前言专题一、深度卷积网络知识专题二、PyTorch应用与实践&#xff08;遥感图像场景分类&#xff09;专题三、卷积神经网络实践与遥感影像目标检测专题四、卷积神经网络的遥感影像目标检测任务案例【FasterRCNN】专题五、Transformer与遥感影像目标检测专题六、Transfo…...

从 x86 到 ARM64:CPU 架构的进化与未来

在计算机发展的历史长河中&#xff0c;x86、x64 和 ARM64 这三大主流 CPU 架构各自书写了辉煌的篇章。它们不仅代表了技术的进步&#xff0c;更承载着无数创新者的梦想与努力。 x86&#xff1a;从 16 位到 32 位的辉煌之路 诞生与崛起 1978 年&#xff0c;英特尔&#xff08;…...

Java数据结构第十二期:走进二叉树的奇妙世界(一)

专栏&#xff1a;数据结构(Java版) 个人主页&#xff1a;手握风云 目录 一、树型结构 1.1. 树的定义 1.2. 树的基本概念 1.3. 树的表示形式 二、二叉树 2.1. 概念 2.2. 两种特殊的二叉树 2.3. 二叉树的性质 2.4. 二叉树的存储 三、二叉树的基本操作 一、树型结构 1.…...

基于ffmpeg+openGL ES实现的视频编辑工具-添加贴纸(八)

在当下丰富多元的音视频编辑应用领域,添加贴纸已然成为一项广受欢迎的功能,它能够为音视频作品注入独特的趣味与创意元素。本文将深入探究音视频添加贴纸背后所涉及的技术原理与实现路径。 一、技术原理概述 音视频从本质上来说,是由一系列连续的图像帧(针对视频部分)以…...

【AI时代】基于AnythingLLM+ Ollama + DeepSeek 搭建本地知识库

一、本地安装Ollama及DeepSeek 参考教程&#xff1a; https://blog.csdn.net/Bjxhub/article/details/145536134 二、下载并安装AnythingLLM AnythingLLM下载地址&#xff1a; https://anythingllm.com/ 傻瓜式安装即可 可以自定义安装路径。三、配置AnythingLLM并使用 3.…...

leetcode刷题记录(一百一十五)——64. 最小路径和

&#xff08;一&#xff09;问题描述 64. 最小路径和 - 力扣&#xff08;LeetCode&#xff09;64. 最小路径和 - 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。说明&#xff1a;每次只能向下…...

UE5 编辑器辅助/加强 插件搜集

1. Actor Locker 地址&#xff1a;https://www.fab.com/listings/ec26ac5e-4720-467c-a3a6-b5103b6b74d0 使用说明&#xff1a;https://github.com/Gradess2019/ActorLocker 支持&#xff1a;5.0 – 5.5 简单的编辑器扩展。它允许你通过世界轮廓窗口/热键/上下文菜单在编辑器视…...

怎么在Github上readme文件里面怎么插入图片?

环境&#xff1a; Github 问题描述&#xff1a; 怎么在Github上readme文件里面怎么插入图片&#xff1f; https://github.com/latiaoge/AI-Sphere-Butler/tree/master 解决方案&#xff1a; 1.相对路径引用 上传图片到仓库 将图片文件&#xff08;如 .png/.jpg&#xff…...

什么是矩阵账号?如何高效运营tiktok矩阵账号

‍‌​​‌‌​‌​‍‌​​​‌‌​​‍‌​​​‌​‌​‍‌​​‌​​‌​‍‌​‌‌​‌‌‌‍‌​‌​‌​​​‍‌​​‌​‌‌​‍‌​​​​‌‌​‍‌​‌​​‌‌‌‍‌​​‌‌​‌​‍‌​‌​​‌‌‌‍‌​‌‌‌​​‌‍‌‌​​‌‌‌​‍‌‌​​‌‌​​‍‌…...

SpringSecurity初始化的本质

一、对SpringSecurity初始化的几个疑问 通过前面第一次请求访问的分析我们明白了一个请求就来后的具体处理流程 对于一个请求到来后会通过FilterChainProxy来匹配一个对应的过滤器链来处理该请求。那么这里我们就有几个疑惑。 FilterChainProxy什么时候创建的?过滤器链和对应的…...

自注意力机制和CNN的区别

CNN&#xff1a;一种只能在固定感受野范围内进行关注的自注意力机制。​CNN是自注意力的简化版本。自注意力&#xff1a;具有可学习感受野的CNN。自注意力是CNN的复杂形态&#xff0c;是更灵活的CNN&#xff0c;经过某些设计就可以变为CNN。 越灵活、越大的模型&#xff0c;需要…...

Vue 不同大版本与 Node.js 版本匹配的详细参数

Vue 2.x 与 Node.js 版本匹配: Vue 2.x 细分版本建议 Node.js 版本理由支持状态2.0 - 2.610.x - 14.x这些 Node.js 版本在 Vue 2.x 早期开发和维护阶段广泛使用&#xff0c;能提供稳定运行环境&#xff0c;适配当时常用构建工具和依赖包Node.js 10.x 维护期已结束&#xff1b;…...

本地部署DeepSeek-R1模型教程

文章目录 第一步&#xff1a;安装运行框架 哈喽各位小伙伴们&#xff0c;最近deepseek非常的火&#xff0c;不过因为全球访问量剧增经常会导致deepseek的服务器繁忙&#xff0c;如果想要稳定使用就得靠本地部署了&#xff0c;不仅可以稳定使用还能保护数据隐私&#xff0c;今天…...

设计心得——解耦的实现技术

一、说明 在前面的“设计心得——解耦”中&#xff0c;对解耦进行了高层次的抽象说明。本篇则对在实践中常用的解耦技术进行逐一分析说明&#xff0c;以期为开发者能更从理论到实践搭建一个桥梁。至于大家能够如何更好的在自己的项目中进行解耦的实践&#xff0c;就需要不断的…...

k2路由器登录校园网

教程1刷入Breed&#xff0c;并手动刷入Padavan固件&#xff1a;斐讯K1、K2、K2P 刷机、刷入Breed 辅助工具 | tb (tbvv.net) Padavan下载网址&#xff1a; 我用的是&#xff1a; Padavan 登录的网址是 192.168.123.1 Padavan配置教程&#xff1a; 先用网线连上校园网&#…...

基于Springboot学生宿舍水电信息管理系统【附源码】

基于Springboot学生宿舍水电信息管理系统 效果如下&#xff1a; 系统登陆页面 系统用户首页 用电信息页面 公告信息页面 管理员主页面 用水信息管理页面 公告信息页面 用户用电统计页面 研究背景 随着高校后勤管理信息化的不断推进&#xff0c;学生宿舍水电管理作为高校后勤…...

手机怎样玩电脑游戏?

如果您正在寻找一款能够实现手机远程控制电脑玩游戏的软件&#xff0c;本文推荐远程看看软件。这款软件不仅支持手机远程控制电脑&#xff0c;还具备电脑与电脑之间的多端互控功能&#xff0c;您能够随时随地畅玩游戏&#xff0c;享受无缝的游戏体验。此外&#xff0c;远程看看…...

【Linux网络】认识协议(TCP/UDP)、Mac/IP地址和端口号、网络字节序、socket套接字

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、初识协议2、UDP、TCP3、Mac、IP地址4、端口号5、网络字节序6、socket 1、初识协议 协议就是一种约定。如何让不同厂商生产的计…...

【软考知识】奇偶校验码,循环冗余码,海明码介绍

文章目录 **1. 奇偶校验码 (Parity Check Code)****基本原理****算法流程****优点与缺点****应用场景** **2. 循环冗余码 (Cyclic Redundancy Check, CRC)****基本原理****算法流程****例子****优点与缺点****应用场景** **3. 海明码 (Hamming Code)****基本原理****算法流程**…...

SOME/IP--协议英文原文讲解10

前言 SOME/IP协议越来越多的用于汽车电子行业中&#xff0c;关于协议详细完全的中文资料却没有&#xff0c;所以我将结合工作经验并对照英文原版协议做一系列的文章。基本分三大块&#xff1a; 1. SOME/IP协议讲解 2. SOME/IP-SD协议讲解 3. python/C举例调试讲解 4.2.2 Req…...

前端面试-网络协议篇

1.http网络协议中post和get有什么区别 在HTTP网络协议中&#xff0c;POST和GET主要有以下区别&#xff1a; 参数传递方式&#xff1a; GET&#xff1a;参数附加在URL后面&#xff0c;如example.com?key1value1&key2value2 。POST&#xff1a;参数放在HTTP请求体中。 数据…...