先理解JS代码执行的过程。

1.引擎:负责整个JavaScript编译及执行的过程2.编译器:负责语法分析和代码生成3.作用域:负责收集并维护所有声明的标识符组成一系列的查询系统,确定当前执行的代码对标识符的访问权限(根据名称查找变量的一套规则)

CommonJS 模块是运行时加载(运行时执行一次),ES6 模块是编译时输出接口(编译时执行一次)。

看看下面一个循环引用的例子。

main.js

import a from './a';
console.log(a)

a.js

console.log('执行a')
import b from './b' // 开始编译b模块,代码停留在这里
console.log(b)
console.log('导入b之后')  export default '我是a模块'

b.js

console.log('执行b')
import a from './a' // 由于a模块还在编译阶段,代码并没有执行结果
console.log(a) // 变量是undefined
console.log('导入a之后')  export default '我是b模块'

结果

// 编译阶段
b.js:1 执行b
b.js:3 undefined
b.js:4 导入a之后    // 执行阶段
a.js:1 执行a
a.js:3 我是b模块
a.js:4 导入b之后
main.js:2 我是a模块

ES6根本不会关心是否发生了"循环引用",只是生成一个指向被加载模块的引用,需要开发者自己保证,取值的时候能够取到值。

模块的循环引用本身不会造成代码报错,只是取值的时候可能无法取到值,可以通过一些逻辑判断处理即可。

ES6模块的循环加载相关推荐

  1. es6 模块的整体加载

    模块的整体加载 除了指定加载某个输出值,还可以使用整体加载,即用星号(*)指定一个对象,所有输出值都加载在这个对象上面. 下面是一个circle.js文件,它输出两个方法area和circumfere ...

  2. CommonJS模块的循环加载

    当循环调用 require() 时,一个模块可能在未完成执行时被返回. 例如以下情况: // a.js console.log('a 开始'); exports.done = false; const ...

  3. es6 循环加载ES6模块

    循环加载ES6模块 "循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本. // a.js var b = requir ...

  4. ES6之Module 的加载实现(3)

    4.循环加载 "循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本 通常,"循环加载"表示存在强耦合 ...

  5. webpack4下import()模块按需加载,打包按需切割模块,减少包体积,加快首页请求速度...

    一:背景 因为项目功能越加越多,打包后的体积越来越大,导致首页展示的时候速度比较慢,因为要等压缩的js的包加载完毕. 首页展示的时候只需要对应的js,并不需要全部的js模块,所以这里就可以用按需加载, ...

  6. mysql_connect() 不支持 请检查 mysql 模块是否正确加载

    在上面文章的基础上配置PHP环境完成之后发现安装(discuz)论坛时候还是有问题! 函数名称                                检查结果          建议 mysq ...

  7. 基于vue的公共looploading组件(vue循环加载--组件)

    前些天做的组件,觉得挺有意思,上传到了github上 https://github.com/SwnCowDevil/my-looploading 说明:    一款基于vue的循环加载公共组件, 组件 ...

  8. boost::graph模块使用 read_graphviz 加载 GraphViz Dot 文本的示例 ,图转换为具有自定义属性的 BGL adjacency_list 图

    boost::graph模块使用 read_graphviz 加载 GraphViz Dot 文本的示例 ,图转换为具有自定义属性的 BGL adjacency_list 图 实现功能 C++实现代码 ...

  9. Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接

    Vue本地图片循环加载显示不出来,vue img标签 :src地址拼接 上代码: <img:src="img"alt="banner" /> dat ...

最新文章

  1. 马尔可夫决策过程 Markov decision process MDP, 连续时间Markov chain, CMDP(全)
  2. Oracle常用命令大全
  3. 快手上也可以看电竞赛事了:S9直播观看人数惊人!
  4. c语言的各种类型的指针,简单总结C语言中各种类型的指针的概念
  5. winform获取appconfig配置文件得配置
  6. php+mysql 图书管理系统源码AfireHong
  7. CI框架解决jsonp跨域的问题
  8. J2EE领域的一些技术框架结构图
  9. 华为光猫设置及拨号连接下开启移动热点
  10. android 视频缓存溢出导致视频黑屏,MediaMuxer+MediaCodec生成MP4视频黑屏
  11. java 工作一年的简历
  12. Matlab二元函数图像绘制
  13. 提高个人效率的方法和工具
  14. 微信公众号通过第三方平台完成授权
  15. Visual C++游戏编程基础之透明半透明效果
  16. php 微信公众号客服,微信公众平台开发 多客服
  17. Qt面试笔试题问答经验总结
  18. 常用的画流程图工具和脑图工具
  19. 《 Kubebuilder v2 使用指南 》-P1-总览篇
  20. SCI论文图表复现-2(十字火山图)

热门文章

  1. 赠书 | 如何建设数据中台?看这份企业数据能力测评就够了!
  2. 支持千万人次毫秒级交易,360金融的系统性能如何做到?
  3. Gartner发布云安全能力评估报告:阿里云全球第二,超过亚马逊!
  4. 对标 PyTorch,清华团队推出自研 AI 框架“计图” | AI 技术生态论
  5. 曾惨遭 Google、Tesla 淘汰,辗转 8 个月,他是如何成为一名顶尖的 AI 工程师?...
  6. BAT 数据披露:缺人!110万AI人才缺口,两者矛盾,凉凉了!
  7. 为何Google、微软、华为将亿级源代码放一个仓库?
  8. 亲测!这本 Python 书销量超过13W+原来是这样
  9. 与吴恩达并肩战斗,她是颜值爆表的 AI 科学家!
  10. 倒计时 5 天!年度开发者盛会 Unite Shanghai 2019 全日程揭晓(附表)