JavaScript模块笔记(一)模块化由来

一小时速通JavaScript模块化,涵盖CommonJS与ES6模块化 阅读详情

无模块概念


JavaScript模块化的历史漫长,一开始,正如在我们初学JavaScript的时候,写的代码不多,我们都是将代码写在一个文件里,因为代码量不多,所以没有感到什么不适,

function foo(){
    // ...
}
function bar(){
    // ...
}

但是当代码开始变多的时候,我们开始感到不适,我们很难找到自己写过的函数,往往会出现命名重复覆盖的现象,挤在一起来的的问题就是
1. 容易污染全局
2. 不便于维护
即使我们放到多个文件里,结果还是一样的,依然会污染全局和不便于维护

以命名空间作为模块


后来,为了减少对环境的污染,采用了Namespace模式

var MYFUN={
    foo:function(){},
    bar:function(){}
}

通过这样来减少了全局上的变量数目,而且我们可以将方法写在这些命名空间里,只要命名空间命名语义化,我们不难找到自己的方法
但是该命名空间本质上是对象,很容易被修改,不安全,我们可以随意在命名空间外查看命名空间内的变量,方法,即命名空间对象的属性,而且也能随意修改其中的内容

以匿名函数作为封闭模块


为了解决安全问题,使用了匿名函数IIFE模式,封闭了“模块”内部的变量,方法,只将需要被调用的内容以return的方式暴露出去,这样在全局看不到匿名函数里面的逻辑,相对安全

var MODULE = (function(){
    var _private = 1;
    var foo = function(){
        console.log('_private: ', _private);
    }
    return {
        foo:foo
    }
})
// 调用方法
Module.foo()
// 无法获取其中的私有变量
Module._private // undefined

然而,这样还存在一定的问题,我们还需要能将其他模块引入当前模块

引入依赖 模块模式


var Module = (function($){
    var _$body_ = $("body"); // 通过这样我们可以在匿名函数中使用其他模块的内容,这里使用了jQuery
    var foo = function(){
        console.log('_private: ', _private);
    }
    return {
        foo:foo
    }
})(jQuery)

这是现在的模块实现的基础,在上面代码中,将jQuery模块导入了匿名函数中,使得在匿名函数中也可以使用jQuery
现在jQuery源码的最外层就是立即执行函数,在调用时传入了window对象,利用window对象暴露接口,所以我们在导入了jQuery后可以直接使用$,实际上是使用了window.$,通过依赖注入将window对象注入了jQuery,所以看起来我们像是在全局使用了$。
jquery最外层代码

( function( global, factory ) {
	// ...
} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
	// ...
	return jQuery;
} )

为什么要模块化


正如上面提及的,模块化是为了降低代码的复杂性和耦合性,在代码量很少的时候,我们没有必要使用模块化,但在代码量多的时候,如果不进行模块化,我们的代码会难以阅读,而且也很难去维护

模块化带来的好处


1.避免命名冲突(减少对全局空间的污染)
通过使用模块化,使得我们在全局空间声明的变量,方法减少,减少了全局空间的污染,即使是最原始的命名空间,也减少了在全局空间的声明
2. 更好地分离,按需加载
将各个部分所需要的变量,方法分布在各个模块,各个部分所需要的变量,方法更为清晰,而我们也只在需要用到这些部分的功能时才调用对应的模块
3. 更高的复用性
通过写在模块内,像是声明方法后多次调用一样,我们可以多次调用模块内容,达到简单复用的效果
4.更高的可维护性
将变量,函数细分到模块内部,我们更容易根据所要修改的功能找到对应的变量,函数,更便于我们维护

模块化带来的问题


1.发起的请求变多
因为将一个JavaScript文件拆分成多个模块,所以我们要发起多次的javascript请求,
2.模块加载顺序错误会带来错误
需要注意模块加载的顺序,在需要对应的模块前要加载好该模块,如果在加载某个模块前调用了该模块的方法,自然是会报错的
3.依赖模糊
如果模块的命名不够语义化,可能会难以看出所要使用的方法来自哪个模块


参考:JavaScript 模块化七日谈

JS模块化的理解与开发 模块化是一种解决问题的方法,它将复杂系统划分为多个独立、可组合、可分解和可更换的模块。在编程领域,模块化意味着遵守一定规则,将大文件拆分成多个相互依赖的小模块。每个模块封装不同的功能并提供使用接口,它们之间互不影响,按需加载。模块化的主要好处包括:高内聚低耦合:有利于团队协作开发。当项目复杂时,可以划分为子模块分给不同人开发,最后组合在一起。这降低了模块间的依赖关系,体现了低耦合;同时,每个模块有特定功能,体现了高内聚。 阅读详情

相关推荐

JavaScript 模块化

了解了一下js模块化,简单记录一下。参考资料: JavaScript 模块化历程 前端模块化模块化发展历程 js一开始并没有模块化的概念,直到ajax被提出,前端能够像后端请求数据,前端逻辑越来越复杂,就出现了许多问题:全局变量,函数名冲突,依赖关系不好处理。 当时使用子执行函数来解决这些问题,比如经典的jquery就使用了匿名自执行函数封装代码,将他们全都挂载到全局变量jquery下

Creabine的博客 4282

产品模块化设计的前世今生

​模块设计最早源自软件设计的基本概念,在早期的软件设计中提出了针对产品功能的模块化设计。在设计好软件的体系结构后,就已经在宏观上明确了各个模块应具有什么功能,应放在体系结构的哪个位置。我们习惯地从功能上划分模块,保持“功能独立”是模块化设计的基本原则。因为,“功能独立”的模块可以降低开发、测试、维护等阶段的代价。但是“功能独立”并不意味着模块之间保持绝对的孤立。一个系统要完成某项任务,需要各个模块相互配合才能实现,此时模块之间就要进行信息交流。模块通常是“由元件或零部件组合而成的、具有独立功能的、可成系列单

PEXUE的专栏 930

浅析ArcGis中的软件——ArcMap、ArcScene、 ArcGlobe、ArcCatalog

ArcMap:是集空间数据显示、矢量数据编辑、冲突数据检查(拓扑检查)、查询检索(地理编码)、统计(字段属性表)、报表生成、空间分析(ArcGIS Spatial Analyst)和高级制图(制图表达)等众多功能干一体的桌面应用平台软件。而且提供所见即所得的符号编辑器,令用户可以随心所欲地生成任意复杂的点、线、面符号。所支持的空间数据格式包括Arclnfo coverages、ESRI shapefiles、ArcSDE lavers、DXF、DWG、DGN、常见的图像格式、GRIDs、TINs等。

lxlmycsdnfree的博客 6565

JS模块化——模块暴露与模块引入

JS模块化四种规范:CommonJS、AMD、CMD、ES6

scorpio的博客 1万+

使用STM32制作简易数字时钟

连接LED数码管的电源和地线到STM32单片机的对应引脚,将数码管的A、B、C、D引脚连接到STM32单片机的I/O口引脚。通过编写和调试这个项目,可以熟悉STM32单片机的GPIO口和定时器的使用,以及数字显示的控制。步骤六:测试和调试 通过观察数码管的显示,可以验证时钟功能是否正常工作。步骤四:编写代码 在主程序中,我们将使用定时器中断来控制时钟的运行,并使用GPIO口控制LED数码管的显示。步骤五:编译和下载 编译代码并下载到STM32单片机中,通过调试器和串口监视器进行调试和查看输出结果。

qq_67153941的博客 1303

第7篇-SAP MM模块-JIT应用实战解析,从计划协议到JIT供应的关键配置与流程

本文深入解析SAP MM模块中的JIT(Just In Time)供应模式,从计划协议到JIT供应的关键配置与流程。通过动态计划行管理、需求聚合与分解等核心功能,实现精确数量、时间和地点的物料供应。文章详细介绍了主数据准备、计划协议配置、MRP参数精调及EDI集成方案,并提供了实施中的典型问题与解决方案,助力企业优化供应链管理。

weixin_30363509的博客 948

JavaScript 模块化编程 - Module Pattern

来源:http://my.oschina.net/chenzhiqiang/blog/129783#OSC_h2_1 http://yuiblog.com/blog/2007/06/12/module-pattern/ http://benalman.com/news/2010/11/immediately-invoked-function-expression/ 目录[-] ##...

weixin_33712881的博客 514

Keil5编译报错:ARM Compiler Version 5缺失的完整解决方案

本文提供了Keil5编译报错“ARM Compiler Version 5缺失”的完整解决方案。详细介绍了手动安装ARM Compiler Version 5的步骤,包括下载安装包、配置编译器路径及常见问题排查,帮助开发者快速恢复老项目的编译环境。

bb456的博客 945

JavaScript 模块化规范 笔记

模块化

2301_79083000的博客 1024

仿真模型简单介绍

同时,各种以伯克利的Spice仿真程序的算法为核心的商用Spice电路仿真工具也随之产生,运行在PC和UNIX平台,许多都是基于原始的SPICE2G6版的源代码,这是一个公开发表的版本,它们都在Spice的基础上做了很多实用化的工作,比较常见的Spice仿真软件有HSpice、Pspice、Spectre、Tspice、SmartSpcie、IsSpice等,虽然它们的核心算法雷同,但仿真速度、精度和收敛性却不一样,其中以Synopsys公司的Hspice和Cadence公司的Pspice最为著名。...

小幽余生不加糖 8002

JS模块化

模块化开发是一种管理方式,一种生产方式,一种解决问题的方案。一个模块就是实现某个特定功能的文件,我们可以很方便的使用别人的代码,想要什么模块,就引入那个模块。 这里介绍了立即执行函数、AMD、CMD、CommonJS、ES Module(ES6 模块)及他们在开发中如何使用。

熊猫的博客 9030

第4章-上下文管理-对话历史记忆系统与窗口优化-《Agentic AI 智能体应用开发》

当上下文窗口接近极限时,需要对已有内容进行压缩。压缩不是简单的截断——你需要保留核心语义,去除冗余。# Python: 对话摘要压缩# 使用 Haiku 做摘要任务,成本最低"""将一段对话历史压缩为摘要"""system="你是一个对话摘要专家。请生成简洁但有信息量的摘要。",f"'用户'

AI天才研究院 246

javascript的模块化

使用require(“模块的路径”)函数来引入模块模块名要以./ 或 …/开头扩展名可以省略(除了扩展名是.cjs)在 JavaScript 中,引入模块时可以省略文件扩展名。当引入的模块是 JavaScript 文件(.js)、JSON 文件(.json)和node(.node)时,可以不写扩展名,Node.js 会根据需要自动解析文件类型并加载对应的模块。* 如果没有.js 后缀的同名文件它会寻找 .json后缀的。(如果两个后缀名都有,则优先导入后缀名为.js的)

拥抱变化! 2591

实战封神!YOLOv7 轻量化部署全攻略:ONNX格式转换+TensorRT极致加速(速度直接提升3-5倍,精度无损)

部署核心链路,这是YOLO系列部署的最优解,速度提升3~5倍,精度无损;ONNX是桥梁:解决模型兼容性问题,简化后能去掉冗余节点,是TensorRT加速的前提;TensorRT是核心:NVIDIA显卡的极致加速引擎,FP16量化是速度与精度的最优平衡,无需手动配置,一键开启;轻量化终极组合YOLOv7-tiny + 416尺寸 + TensorRT FP16,速度提升5~8倍,满足所有实时检测场景;避坑核心:转换参数必加,推理尺寸必须一致,engine文件显卡专属。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 308

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

JS模块化和使用

JS模块化和使用 很久以前就知道js模块化开发可以使用require.js和sea.js,就一直没去看看。最近在了解查看的,度一下require.js相关的博客和文章,写得真是操蛋的疼,都是互相抄来抄去,博主应该都没有自己实际去敲过,哪怕给我写一个完整的简单应用示例我都可以上手,结果把自己折腾得……后面也看来sea.js,简单明了,上手容易多(主要是别人写的博客文档好)。 什么是模块化 模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问题进行系统性的分解以之处理。模块化是一种

weixin_45820444的博客 4463

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

JavaScript模块化——JS模块化介绍与CommonJS规范

对于JS模块化中的CJS介绍和JS模块化的介绍

PleaSure乐事的博客 1819

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Nodejs基础之JavaScript模块化(一)

✍ 1、JavaScript模块化 什么是模块化开发呢? 事实上模块化开发最终的目的是将程序划分成一个个小的结构 这个结构中编写属于自己的逻辑代码,有自己的作用域,不会影响到其他的结构 这个结构可以将自己希望暴露的变量、函数、对象等导出给其结构使用 也可以通过某种方式,导入另外结构中的变量、函数、对象等 上面说提到的结构,就是模块;按照这种结构划分开发程序的过程,就是模块化开发的过程 1.1、CommonJS 我们需要知道CommonJS是一个规范,最初提出来是在浏览器以外的地方使用,并且当时被命名为S

Augenstern_QXL的博客 3038

什么是模块化编程如何在JavaScript中实现模块化

引言基本概念和作用说明什么是模块化编程?模块化编程的作用JavaScript中的模块化发展实现模块化的示例示例一:使用IIFE实现简单模块示例二:使用AMD(Asynchronous Module Definition)规范示例三:使用CommonJS规范示例四:使用ES6模块示例五:使用动态导入功能使用思路开发技巧分析模块化编程是一种将程序划分为多个独立模块的设计思想。每个模块负责完成特定的功能,并通过明确的接口与其他模块进行通信。模块之间的依赖关系应当尽量减少,以降低耦合度,提高代码的灵活性和可测试性。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1224

模块化的力量:JavaScript的模块化革命

🤍 前端开发工程师、技术日更博主、已过CET6🍨、23年度博客之星前端领域TOP1🕠高级专题作者、打造专栏🍚签约作者、上架课程。

你若盛开,清风自来 2018

一文搞懂 JavaScript 模块化

本文介绍了 JavaScript 中主要模块方案和其背后的原因,希望对您有帮助,在日后的工作中看到任何模块,都不再困扰。

weixin_45727472的博客 1735

JavaScript模块化

JavaScript模块化

perfectmvp的博客 929

JavaScript 模块化编程(一)

目前市场上有很多 JavaScript 书籍,其中一些非常好。然而,大多数书籍都侧重于语言本身的各个方面或使用某些框架来构建 JavaScript 应用程序。在这本书中,我们将采取不同的方法,探讨基于模块创建 JavaScript 应用程序的架构设计,而不需要第三方框架。创建一个好的应用程序不仅仅是编写好的代码,还涉及到应用程序的不同部分是如何工作以及它们之间如何相互交互的。一个好的应用程序的另一个特点是它能够轻松地进行维护、扩展和按需扩展。

龙哥盟 1149
上一篇: ES6学习笔记(二十)ES Module的语法与使用
下一篇: JavaScript模块化(二)CommonJS
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值