CommonJS模块的循环加载
当循环调用 require()
时,一个模块可能在未完成执行时被返回。
例如以下情况:
// a.js
console.log('a 开始');
exports.done = false;
const b = require('./b.js');
console.log('在 a 中,b.done = %j', b.done);
exports.done = true;
console.log('a 结束');
// b.js
console.log('b 开始');
exports.done = false;
const a = require('./a.js');
console.log('在 b 中,a.done = %j', a.done);
exports.done = true;
console.log('b 结束');
// main,js
console.log('main 开始');
const a = require('./a.js');
const b = require('./b.js');
console.log('在 main 中,a.done=%j,b.done=%j', a.done, b.done);
当 main.js
加载 a.js
时, a.js
又加载 b.js
。
此时, b.js
会尝试去加载 a.js
。为了防止无限的循环,会返回一个 a.js
的 exports 对象的 未完成的副本 给 b.js
模块。
然后 b.js
完成加载,并将 exports
对象提供给 a.js
模块。
当 main.js
加载这两个模块时,它们都已经完成加载。因此,该程序的输出会是:
main 开始
a 开始
b 开始
在 b 中,a.done = false
b 结束
在 a 中,b.done = true
a 结束
在 main 中,a.done=true,b.done=true
完
CommonJS模块的循环加载相关推荐
- ES6模块的循环加载
先理解JS代码执行的过程. 1.引擎:负责整个JavaScript编译及执行的过程2.编译器:负责语法分析和代码生成3.作用域:负责收集并维护所有声明的标识符组成一系列的查询系统,确定当前执行的代码对 ...
- es6 循环加载ES6模块
循环加载ES6模块 "循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本. // a.js var b = requir ...
- mysql_connect() 不支持 请检查 mysql 模块是否正确加载
在上面文章的基础上配置PHP环境完成之后发现安装(discuz)论坛时候还是有问题! 函数名称 检查结果 建议 mysq ...
- 基于vue的公共looploading组件(vue循环加载--组件)
前些天做的组件,觉得挺有意思,上传到了github上 https://github.com/SwnCowDevil/my-looploading 说明: 一款基于vue的循环加载公共组件, 组件 ...
- boost::graph模块使用 read_graphviz 加载 GraphViz Dot 文本的示例 ,图转换为具有自定义属性的 BGL adjacency_list 图
boost::graph模块使用 read_graphviz 加载 GraphViz Dot 文本的示例 ,图转换为具有自定义属性的 BGL adjacency_list 图 实现功能 C++实现代码 ...
- Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接
Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接 上代码: <img:src="img"alt="banner" /> dat ...
- es6 模块的整体加载
模块的整体加载 除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面. 下面是一个circle.js文件,它输出两个方法area和circumfere ...
- Linux 2.6内核的编译步骤及模块的动态加载
本文是基于2.6的内核,也建议各位可以先看一下<Linux内核设计与实现(第二版)>作为一个基础知识的铺垫.当然,从实践角度来看,只要按着以下的步骤去做也应该可以实现成功编译内核及加载模块 ...
- Node模块引入与加载机制
Node模块引入与加载机制 引入模块 Node.js 提供了 exports 和 require 两个对象,其中 exports 是模块公开的接口,require 用于从外部获取一个模块的接口,即所获 ...
最新文章
- Python2.x与3​​.x版本区别
- linux multipath简介配置 存储设备故障 负载均衡 虚拟化工具
- Oracle优化11-10046事件
- Sublime优美设置(待续)
- centos6.6 源码安装mysql5.5_CentOS6.x下源码安装MySQL5.5
- 第二章 变量和基本类型
- python读取json文件多个json数据_Python 加载包含多个JSON对象的JSON文件
- Kotlin入门(33)运用扩展属性
- html中使用过渡不显示,CSS3过渡不适用于显示属性
- 网卡设置 多网卡的7种bond模式原理
- RESTful WebServices Cookbook中文版
- @font-face 字体图标的应用
- project安装包_Project项目计划进度可编辑模板及安装包免费获取
- Fedora 13 咪咕播放器
- 无线传感器网络定位概念
- 英语语法——万法归宗
- Separating Skills and Concepts for Novel Visual Question Answering 论文笔记
- Spring Interceptor vs Filter 拦截器和过滤器区别
- spring jpa Specification in 查询
- 一篇超频菜鸟必看的基础知识大全!