• CommonJS模块是运行时加载,ES6模块是编译时输出接口
    是因为CommonJS加载的是一个对象(module.exports属性),该对象只有在脚本运行结束时才会生成.而ES6模块不是对象,它的对外接口只是一种静态定义,在代码静态解析阶段就会生成.

  • CommonJS模块输出的是一个值的复制,ES6模块输出的是值得引用

// 也就是说,一旦输出一个值,模块内部的变化就影响不到这个值// lib.js
var counter = 3;
function incCounter() {counter++;
}
module.exports = {conuter: counter,incCounter: incCounter,
};// main.js
var mod = require('./lib');console.log(mod.counter);   // 3
mod.incCounter();
console.log(mod.counter);    // 3// 注:可以看到,虽然执行了incCounter() ,即:counter++,  但是打印出counter的值还是3,并未增加// 一个解决办法就是将counter放在函数的返回值里面输出
// lib.js
var counter = 3;
function incCounter(){counter++;
}
module.exports ={get counter() { return counter},incCounter: incCounter,
};
// 注:get在获取counter属性时会执行,返回counter的值.

ES6模块的运行机制:JS引擎对脚本静态分析的时候,遇到模块加载命令import就会生成一个只读引用。等到真正执行时,再根据这个只读引用到被加载的模块中取值。因此,ES6模块是动态引用,并且不会缓存值,模块里面的变量绑定其所在的模块.

// lib.js
export let counter = 3;
export function incCounter() {counter++;
}// main.js
import { counter, incCounter } from './lib';
console.log(counter);   // 3
incCounter();
console.log(counter);   // 4

参考《ES6标准入门》(第3版)P477~P479

javascript --- ES6模块与CommonJS模块的差异相关推荐

  1. ES6模块与commonJS模块的差异

    参考: 前端模块化 ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,旨在成为浏览器和服务器通用的模块解决方案. 其模块功能主要由两个命令构成:export和import.export命 ...

  2. 详解CommonJS模块与ES6模块

    详解CommonJS模块与ES6模块 历史上,JS一直没有模块体系,在ES6之前,最主要的是CommonJS和AMD两种.前者用于服务器,后者用于浏览器,ES6在语言标准的层面上实现了模块功能,使用简 ...

  3. 为什么ES模块比CommonJS更好?

    ES6 模块与 CommonJS 模块的差异 1.CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用.2.CommonJS 模块是运行时加载,ES6 模块是编译时输出接口. Co ...

  4. ES6的介绍以及模块导出与导入

    # ES6 > 1.介绍 > > ECMAScript(简称ES)的几个重要版本 > > ES5 : 2009年发布 > > ES6 2015年发布 ES20 ...

  5. 关于JavaScript的模块(CommonJS, AMD, CMD, ES6模块)的理解

    Javascript模块化就是解决将代码进行分隔,作用域隔离,模块之间的依赖管理等多个方面问题. 这样的优点不言而喻:1.可维护性2.命名空间私有化,可以避免污染全局环境3.代码重用,通过模块可以方便 ...

  6. es6 混合commjs_详谈commonjs模块与es6模块的区别

    到目前为止,已经实习了3个月的时间了.最近在面试,在面试题里面有题目涉及到模块循环加载的知识.趁着这个机会,将commonjs模块与es6模块之间一些重要的的区别做个总结.语法上有什么区别就不具体说了 ...

  7. JavaScript CommonJS 模块

    JavaScript CommonJS 模块是一种使用 JavaScript 语言实现的模块化编程规范.它是在服务器端开发 Node.js 应用程序时使用最广泛的模块化方案之一. CommonJS 模 ...

  8. 【ES6(2015)】Module模块

    文章目录 1. 模块化的发展 2. export 3. as 4. export default 5. import 1. 模块化的发展 随着前端的发展,web技术日趋成熟,js功能越来越多,代码量也 ...

  9. Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL

    文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...

最新文章

  1. Makefile常用信息查询页
  2. 我所理解的RESTful Web API [设计篇]
  3. IAR的const,变量指定绝对地址,函数指定存取区域
  4. 利用JPEG制作更快,更准确的神经网络
  5. 2014年2月份第3周51Aspx源码发布详情
  6. 多看 android6,多看阅读本地版
  7. c语言e怎么表示_来测测!这11个C语言入门基础知识你都掌握了吗?
  8. NYOJ-水池数目(bfs)
  9. java 判断字符串是否汉子_java判断 字符串 是否有汉字
  10. 嵌入式系统开发之中断控制的实现
  11. Python basemap模拟导弹发射
  12. 卸载McAfee for Mac
  13. 文献阅读---普通狗牙根阳江基因组单倍型解析与基因组稳定性和匍匐性研究
  14. Flink统计日志图片信息并降序排序
  15. 上网本丢失F盘怎么恢复
  16. 前端性能测试(一):CPU
  17. 「 墙裂推荐」互联网人必备GIF制作的14种选择
  18. python爬虫库scrapy_使用Python爬虫Scrapy框架爬取数据
  19. JLINK的SWD接口调试器制作
  20. 超详细的商业智能BI知识分享,值得收藏

热门文章

  1. mysql数据库优化清理_mysql 数据库优化整理
  2. lan8720a自协商启动_紫金矿业2020届校招海外9站全面启动(面向全专业)
  3. golang延时_golang 实现延迟消息原理与方法
  4. Java编程基础阶段笔记 day 07 面向对象编程(上)
  5. 对浅拷贝与深拷贝的研究
  6. 常见笔试面试问题点(转载)
  7. js -- 时间转年月日
  8. 模式主节点ORACLE DG介绍(物理无实例)
  9. Session的模拟
  10. ps cs3中显示任何像素不大于50%选择。选区边将不可见是什么意思