
2025-04-21 日报 Day163

今日的鸡汤
只争朝夕、不负韶华,是对未来最好的宣示。
今日学习内容
1、JS 红皮书 P783-790 第二十六章:模块
今日笔记
1、使用ES6模块: ES6 最大的一个改进就是引入了模块规范。这个规范全方位简化了之前出现的模块加载器,原生浏览器支持意味着加载器及其他预处理都不再必要。从很多方面看,ES6 模块系统是集 AMD 和 CommonJS之大成者。
- 模块标签及定义: ECMAScript 6 模块是作为一整块 JavaScript 代码而存在的。带有 type=”module”属性的
即使与常规 JavaScript 文件处理方式不同,JavaScript 模块文件也没有专门的内容类型。
与传统脚本不同,所有模块都会像 另外,可以改为加载外部 JS 模块定义: 嵌入的模块定义代码不能使用 import 加载到其他模块。只有通过外部文件加载的模块才可以使用import 加载。因此,嵌入模块只适合作为入口模块。 - 模块加载: 完全支持 ECMAScript 6 模块的浏览器可以从顶级模块加载整个依赖图,且是异步完成的。浏览器会解析入口模块,确定依赖,并发送对依赖模块的请求。这些文件通过网络返回后,浏览器就会解析它们的内容,确定它们的依赖,如果这些二级依赖还没有加载,则会发送更多请求。这个异步递归加载过程会持续到整个应用程序的依赖图都解析完成。解析完依赖图,应用程序就可以正式加载模块了。
- 模块行为: ECMAScript 6 模块借用了 CommonJS 和 AMD 的很多优秀特性。下面简单列举一些。
模块代码只在加载后执行。
模块只能加载一次。
模块是单例。
模块可以定义公共接口,其他模块可以基于这个公共接口观察和交互。
模块可以请求加载其他模块。
支持循环依赖。
ES6 模块系统也增加了一些新行为。
ES6 模块默认在严格模式下执行。
ES6 模块不共享全局命名空间。
模块顶级 this 的值是 undefined(常规脚本中是 window)。
模块中的 var 声明不会添加到 window 对象。
ES6 模块是异步加载和执行的。
浏览器运行时在知道应该把某个文件当成模块时,会有条件地按照上述 ECMAScript 6 模块行为来施加限制。与访问人数 总访问量由 Hexo 驱动 主题 Redefine v2.6.4