中高级工程师都需知道的七种高级 JavaScript 技术用例

直接干货走起:

1. 掌握闭包,让代码更简洁 

闭包是 JavaScript 中最强大且经常被误解的功能之一。它们允许你使用私有变量创建函数,从而使你的代码更加模块化和更安全。

什么是闭包?当函数记住其词法范围时,即使函数执行完毕,也会创建闭包。这对于在不使用全局变量的情况下维护函数中的状态非常有用。

// Example of a closure
function createCounter() {let count = 0;return function() {count++;return count;};
}const counter = createCounter();
console.log(counter()); // 1
console.log(counter()); // 2

用例:闭包非常适合在事件处理程序中维护状态、创建私有变量或开发高阶函数等场景。

2. 解构让代码更简洁 

解构是 ES6 的一项功能,它允许你从数组或对象中提取值并以更简洁的方式将它们分配给变量。它简化了代码,使其更易于阅读和维护。

// Object destructuring
const person = { name: 'Alice', age: 30 };
const { name, age } = person;console.log(name); // 'Alice'
console.log(age);  // 30// Array destructuring
const numbers = [1, 2, 3];
const [first, second] = numbers;console.log(first);  // 1
console.log(second); // 2

用例:解构在处理 API 或复杂对象时特别有用,它允许你仅提取所需的数据。

3. 去抖动和节流以实现性能优化 

处理用户事件(如滚动或调整大小)时,每次发生用户操作时触发事件会显著影响性能。去抖动和节流是两种用于控制函数执行速率的技术。

去抖动:确保函数仅在一定时间不活动后执行。

节流:确保函数在指定时间内最多执行一次。

// Debounce function
function debounce(func, delay) {let timeout;return function(...args) {clearTimeout(timeout);timeout = setTimeout(() => func.apply(this, args), delay);};
}// Throttle function
function throttle(func, limit) {let inThrottle;return function(...args) {if (!inThrottle) {func.apply(this, args);inThrottle = true;setTimeout(() => inThrottle = false, limit);}};
}

用例:使用防抖和节流来优化搜索输入、滚动事件监听器和调整大小事件等情况下的性能。

4. 柯里化函数以提高可重用性 

柯里化将接受多个参数的函数转换为每个接受单个参数的函数序列。此技术使函数更具可重用性并允许部分应

// Basic curry function
function curry(fn) {return function curried(...args) {if (args.length >= fn.length) {return fn.apply(this, args);} else {return function(...nextArgs) {return curried.apply(this, args.concat(nextArgs));};}};
}// Usage
const add = (a, b, c) => a + b + c;
const curriedAdd = curry(add);console.log(curriedAdd(1)(2)(3)); // 6

用例:在构建可与部分数据一起重用的复杂函数时,柯里化特别有用,例如,在函数式编程或 React 组件中。

5. 使用代理拦截对象行为

代理对象允许你拦截和重新定义对象的基本操作,例如属性访问、赋值和函数调用。这对于验证、日志记录或构建反应式框架非常有用。

const person = {name: 'John',age: 25
};const handler = {get: function(target, property) {console.log(`Getting property ${property}`);return property in target ? target[property] : 'Property not found';},set: function(target, property, value) {if (property === 'age' && value < 0) {console.error('Age cannot be negative');} else {target[property] = value;}}
};const proxyPerson = new Proxy(person, handler);
console.log(proxyPerson.name); // Logs "Getting property name" and outputs "John"
proxyPerson.age = -5; // Logs "Age cannot be negative"

用例:代理通常用于数据验证、Vue.js 等反应式框架以及记录对敏感数据的访问。

6. 了解事件循环和异步 JavaScript 

JavaScript 是单线程的,这意味着它一次只能执行一个任务。但是,它的事件循环允许异步操作高效进行,而不会阻塞主线程。

了解事件循环对于编写高效的异步代码至关重要,尤其是在处理 setTimeout、Promises 和 async/await 时。

console.log('Start');setTimeout(() => {console.log('Inside setTimeout');
}, 0);Promise.resolve().then(() => {console.log('Inside Promise');
});console.log('End');
// Output: 
// Start
// End
// Inside Promise
// Inside setTimeout

用例:在构建实时应用程序、处理 API 请求或管理异步任务时,了解事件循环的工作原理至关重要。

7. 记忆化以提高性能 

记忆化是一种用于缓存昂贵函数调用结果并在相同输入再次出现时返回缓存结果的技术。这可以显著提高使用相同输入频繁调用的函数的性能。

function memoize(fn) {const cache = new Map();return function(...args) {const key = JSON.stringify(args);if (cache.has(key)) {return cache.get(key);}const result = fn.apply(this, args);cache.set(key, result);return result;};
}// Usage
const slowFunction = (num) => {console.log('Long computation...');return num * 2;
};const memoizedFunction = memoize(slowFunction);
console.log(memoizedFunction(5)); // Long computation... 10
console.log(memoizedFunction(5)); // 10 (from cache)

用例:记忆化对于优化数据密集型应用程序中的昂贵计算非常有用,例如对大型数据集进行排序或执行复杂的数学运算。

掌握这些高级 JavaScript 技术将帮助你编写更简洁、更高效、更强大的代码。无论你是优化性能、提高可读性还是构建可扩展的应用程序,这些方法都将使你的 JavaScript 技能更上一层楼。

关于优联前端

        武汉优联前端科技有限公司由一批从事前端10余年的专业人才创办,是一家致力于H5前端技术研究的科技创新型公司,为合作伙伴提供专业高效的前端解决方案,合作伙伴遍布中国及东南亚地区,行业涵盖广告,教育, 医疗,餐饮等。有效的解决了合作伙伴的前端技术难题,节约了成本,实现合作共赢。可进行Web前端,微信小程序、小游戏,2D/3D游戏,动画交互与UI广告设计等各种技术研发。

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

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

相关文章

ESP32 本地大模型部署语音助手

ESP32S3 Box 提供了 chatgpt 的 demo。因为访问不了的原因&#xff0c;打算改来做一个本地化部署的专用语音助手。 文章目录 准备工作Windows 安装 ESP-IDFWSL 安装 ESP-IDF配置 IDF编译 chatgpt demo串口映射下载 语音助手调试步骤遇到的问题在WSL2中&#xff0c;server.py 脚…

Vue3项目开发——新闻发布管理系统(八)

文章目录 十、新闻管理模块设计开发1、新闻管理主页面设计1.1 基本架构搭建1.1.1 搜索表单1.1.2 新闻主表格样式(静态数据模拟渲染)1.2 新闻分类选择框1.2.1 新建组件1.2.2 页面中导入渲染1.2.3 调用接口,动态渲染下拉分类,设计成 v-model 的使用方式1.2.4 父组件定义参数绑定…

供应链采购管理系统:开启智能采购新时代

在当今全球化的商业环境中&#xff0c;供应链管理的高效性和智能化对于企业的生存与发展至关重要。而供应链采购管理系统&#xff0c;尤其是智能采购系统&#xff0c;正成为企业提升竞争力的关键工具。 一、传统采购管理的挑战 传统的供应链采购管理往往面临着诸多难题。首先&a…

数据中心里全速运行的处理器正在浪费能源

数据中心是耗电大户&#xff0c;运营商一直在努力解决的一个关键问题是如何减少能源和资源消耗。人们已经找到了一些巧妙的解决方案&#xff0c;例如使用非饮用水来冷却设备&#xff0c;但一个显而易见的解决方案似乎被忽略了&#xff1a;启用处理器的各种省电功能。 随着需求的…

示例说明:sql语法学习

SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;是一种用于管理关系型数据库的标准语言。学习SQL可以帮助你有效地查询、插入、更新和删除数据库中的数据。以下是SQL语法的一些基本概念和常用命令&#xff1a; 1. SQL基础语法 SQL关键字&am…

揭秘化工产品网络优化成本:性价比高的策略大公开

合作咨询联系竑图 hongtu201988 化工产品网络推广到底需要多少钱&#xff1f;为什么有些几千就行&#xff0c;有些需要几万甚至几十万不等&#xff1f;可以肯定地说&#xff1a;化工产品网络优化的费用并非一成不变&#xff0c;而是受到多种因素的影响。今天湖南竑图网络给大家…

ucosii+STM32 BLDC电机控制器设计 附源程序Proteus仿真

资料下载地址&#xff1a;ucosiiSTM32 BLDC电机控制器设计 附源程序Proteus仿真 嵌入式&#xff0c;现在把我的程序和设计思路分享给大家。 软件所用版本如下 Proteus版本 SP 8.7 STM32CubeMX 版本 5.4.0 HAL固件库版本 1.8.0 Keil 版本 uVison5 一、设计思路&#xff1a; …

如何构建出更好的大模型RAG系统?

ChatGPT爆火之后&#xff0c;以ChatPDF为首的产品组合掀起了知识库问答的热潮。 在过去一整年中&#xff0c;大多数人都在完成RAG系统到高级RAG系统的迭代升级。但是技术发展是迅速的&#xff0c;如何深入了解RAG的发展&#xff0c;做出更好的RAG系统&#xff0c;其实还是非常…

手术缝合线合格品检测项目众多 线径又是其重要一环!

手术缝合线的合格与否&#xff0c;关系着使用及恢复情况&#xff0c;其品质的优劣非常重要&#xff0c;而要想得到合格的手术缝合线&#xff0c;则需要多种类型的仪器进行检测。其中线径就是重要一环&#xff0c;下面来看看线径检测仪&#xff0c;并简单介绍一下其他所需检测信…

C++中stack类和queue类

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 数据结构习题_LaNzikinh篮子的博客-CSDN博客 初阶数据结构_LaNzikinh篮子的博客-CSDN博客 收入专栏&#xff1a;C_LaNzikinh篮子的博客-CSDN博客 其他专…

显示数量以及坐标区间

import re import numpy as np import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties# 动态加载字体文件 font_path /usr/local/sunlogin/res/font/wqy-zenhei.ttc # 替换为实际字体路径 my_font FontProperties(fnamefont_path)# 定义日志…

软件需求规格说明书编制模板参考(Doc原件)

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需…

个人量化成功之路-----从 Yahoo! Finance 下载交易策略数据

雅虎财经 是投资者最受欢迎的网站之一。它提供有关股票、债券、货币和加密货币的各种市场数据。它还提供市场新闻、报告和分析、期权和基本数据 官方的雅虎财经 API 于 2017 年被下架 Yfinance 是由 Ran Aroussi 开发的开源 Python 库&#xff0c;用于访问雅虎财经上可用的财…

mysql 报 ERROR 1273: Unknown collation: ‘utf8mb4_0900_ai_ci‘ 的处理

1、数据库sql是mysql8的导出的&#xff0c;本机上安装的还是5.7的版本&#xff0c;然后导入sql&#xff0c;直接就报错。 2、mysql的下载地址&#xff1a; MySQL :: Download MySQL Community Server 3、报错截图&#xff1a; 4、重新选择一个collation就可以了&#xff0c;…

气膜建筑的维护与维修:延长使用寿命的关键—轻空间

气膜建筑以其快速搭建、低成本和灵活的空间设计&#xff0c;被广泛应用于体育馆、仓储设施等多个领域。然而&#xff0c;随着时间的推移&#xff0c;气膜建筑的结构和材料在使用过程中不可避免地受到环境和使用条件的影响&#xff0c;因此定期维护和必要的维修显得尤为重要。了…

每日1题-2

2207 字符串中最多数目的子序列 本题要找pattern在text出现的次数 然后在插入pattern中的一个字符 得到更多的出现次数 很容易想到先求出不插入字符前 子序列出现的次数 我们可以用遍历的方式 让pattern[0]为x pattern[1]为y 遍历text遇到x让x数目加1 遇到y让y数目加1 总数ans…

CSRF中级防御绕过

1&#xff09;回顾low级别做过csrf页面的密码重置&#xff0c;重复之前的操作&#xff0c;我们发现级别调整中级之后&#xff0c;报错如下 2&#xff09;查看源码 $_SERVER[‘HTTP_REFERER’]:上一次的请求的url$_SERVER[‘SERVER_NAME’]&#xff1a;当前的服务器的host代码&…

文献笔记 - Reinforcement Learning for UAV Attitude Control

这篇博文是自己看文章顺手做的笔记 只是简单翻译和整理 仅做个人参考学习和分享 如果作者看到觉得内容不妥请联系我 我会及时处理 本人非文章作者&#xff0c;文献的引用格式如下&#xff0c;原文更有价值 Koch W, Mancuso R, West R, et al. Reinforcement learning for UA…

电子信息制造业数据安全如何防护?有什么加密方案?

电子信息制造业数据加密解决方案 问题 1.电子文档&#xff08;源代码、设计图纸、设计方案等&#xff09;均要做数据保护措施&#xff0c;防止内部人员有意或无意造成数据泄露&#xff1b; 2.与外部企业之间往来的外发文件&#xff0c;管控不当&#xff0c;容易造成泄密&…