发布时间:2026/8/25 23:54:31
JavaScript 模块化系统 - JavaScript学习系列文章 一、为什么需要模块化想象一下你正在写一个大型项目, 所有代码都堆在一个文件里:// 可怕的全局变量地狱var utils {...};var api {...};var componentA {...};var componentB {...};// 20000行之后...functiondoSomething() {//谁知道这个函数会不会覆盖前面的定义?}这种写法有几个致命问题:命名冲突:变量和函数都在全局作用域容易覆盖依赖混乱:不知道代码执行前需要加载哪些依赖难以维护:代码组织像意大利面条牵一发而动全身模块化就是为了解决这些问题而生的! 它让我们可以:将代码拆分成独立的小文件(模块)明确声明依赖关系避免污染全局命名空间方便代码复用和维护二、CommonJSCommonJS 是 Node.js 采用的模块系统, 语法非常简单:// math.jsfunctionadd(a, b) {return a b;}functionsubtract(a, b) {return a - b;}//导出模块module.exports {add,subtract};//或者也可以这样导出exports.add add;exports.subtract subtract;使用的时候如下所示:// app.jsconst math require(./math.js);console.log(math.add(2,3));// 5console.log(math.subtract(5,2));// 3它有什么特点呢?同步加载:模块在 require 时同步加载并执行.缓存机制:模块首次加载后会被缓存, 后续 require 直接返回缓存.值拷贝:导出的是值的拷贝(对于原始类型), 修改不会影响原模块.三、ES ModulesES Modules(简称 ESM)是 ECMAScript 2015(ES6)引入的官方模块系统, 现在已经被现代浏览器和 Node.js 支持.基本语法:// math.jsexportfunctionadd(a, b) {return a b;}exportfunctionsubtract(a, b) {return a - b;}// 或者默认导出exportdefault {add,subtract};导入模块:// 命名导入import { add, subtract }from./math.js;// 默认导入import mathfrom./math.js;// 混合导入import math, { add }from./math.js;// 整体导入import *as mathfrom./math.js;与CommonJS的区别:静态分析:ESM 的 import/export 必须在顶层作用域, 可以被静态分析动态绑定:ESM 导出的是值的引用(活的绑定), 修改会影响所有导入异步加载:ESM 在浏览器中是异步加载的// counter.jsexportlet count 0;exportfunctionincrement() {count;}// app.jsimport { count, increment }from./counter.js;console.log(count);// 0increment();console.log(count);//1(ESM是动态绑定)在浏览器里如何加载模块呢?!-- 传统脚本 --scriptsrcapp.js/script!-- 模块脚本 --scripttypemodulesrcapp.js/script关键区别:模块默认defer, 在文档解析完成后执行模块有独立作用域, 不会污染全局模块需要 CORS 配置, 不能使用 file:// 协议模块会自动应用严格模式四、按需加载静态导入(import ... from ...)必须在模块顶层, 但有时候我们需要按需加载:// 普通导入import(./math.js).then(math {console.log(math.add(2,3));});// 配合 async/awaitasyncfunctioncalculate() {const math awaitimport(./math.js);console.log(math.add(2,3));}条件加载:if (user.isAdmin) {import(./admin.js).then(...);}预加载:link relmodulepreload hrefcritical-module.js组合使用:Promise.all([import(./moduleA.js),import(./moduleB.js)]).then(([moduleA, moduleB]) {// 两个模块都加载完成});

相关新闻

2026/8/25 23:54:31

孩子头发稀少年年不长要不要补锌2026年6款发量测评榜

我家闺女头发从小就稀,别家小姑娘都能扎起小辫子,她的头发却软塌塌贴在头皮上,一年过去也没见长多少,梳起来就那么细细一小把。为了这个,我试过各种儿童洗发水,无硅油的、含生姜的、氨基酸配方的&#xff0…

2026/8/25 23:54:31

《李大霄投资战略 第3版》PDF文件完整目录分享和PDF文件下载

《李大霄投资战略 第3版》PDF文件完整目录分享和PDF文件下载 今天分享一本比较有代表性的投资类书籍——《李大霄投资战略》第3版。这本书主要围绕股票投资、市场周期、风险偏好、价值投资、A股大势判断等内容展开。 对于想系统了解李大霄投资观点的人来说,这一版…

2026/8/26 2:29:39

京东后端面试复盘:高并发与分布式系统实战解析

1. 面试背景与准备心得2026年1月6日这场京东后端实习面试,是我作为2027届计算机专业学生参加的第一场大厂技术面。虽然最终结果不尽如人意,但整个准备和面试过程让我对互联网大厂的技术要求有了全新认知。京东作为国内电商巨头,其后端系统面临…

2026/8/26 2:29:39

煤矿冲击地压预测:物理机制驱动的数据重构与可解释建模

1. 这不是一道“普通”的数学建模题:为什么C题让90%的队伍卡在数据预处理上?五一杯高校数学建模邀请赛C题——“煤矿深部开采冲击地压危险预测”,表面看是典型的分类/回归预测问题,但实际操作中,我带过的23支参赛队里&…

2026/8/26 2:29:39

AIGC时代Java后端架构演进与面试要点解析

1. 项目背景与核心挑战 最近两年内容社区和AIGC领域的技术迭代,让Java后端面试的考察维度发生了显著变化。去年我带团队面试了37位候选人,发现传统CRUD问题已经无法有效区分能力层级,而结合AIGC场景的工程问题正在成为新的考察重点。 这个现…

2026/8/26 2:24:38

技术面试中的幽默与专业平衡术

1. 面试场景还原:当严谨遇上幽默去年冬天的一次技术面试让我至今难忘。那天我作为某互联网公司的面试官,遇到了一位特别的候选人——五年Java开发经验,简历上写着"擅长用代码解决实际问题,偶尔也解决面试官的困意"。开场…

2026/8/25 1:04:19

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 11:48:27

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 16:56:43

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 0:04:32

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 1:19:35

JSON总结

JSON概念 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,主要用于跟服务器进行交换数据。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C、C#、Java、JavaScr…

2026/8/26 1:19:35

保存连接sse 是什么原理,为什么不会一直请求

“保持连接”用的是 SSE(Server-Sent Events),本质是一个没有马上结束的 HTTP 请求。 过程是: 拷贝机发送一次请求: GET /api/code-sync/events服务器返回: Content-Type: text/event-stream但不关闭响应&…

2026/8/24 13:42:17

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/24 18:13:48

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/25 1:08:14

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…