javascript --- ES6模块与CommonJS模块的差异
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模块的差异相关推荐
- ES6模块与commonJS模块的差异
参考: 前端模块化 ES6 在语言标准的层面上,实现了模块功能,而且实现得相当简单,旨在成为浏览器和服务器通用的模块解决方案. 其模块功能主要由两个命令构成:export和import.export命 ...
- 详解CommonJS模块与ES6模块
详解CommonJS模块与ES6模块 历史上,JS一直没有模块体系,在ES6之前,最主要的是CommonJS和AMD两种.前者用于服务器,后者用于浏览器,ES6在语言标准的层面上实现了模块功能,使用简 ...
- 为什么ES模块比CommonJS更好?
ES6 模块与 CommonJS 模块的差异 1.CommonJS 模块输出的是一个值的拷贝,ES6 模块输出的是值的引用.2.CommonJS 模块是运行时加载,ES6 模块是编译时输出接口. Co ...
- ES6的介绍以及模块导出与导入
# ES6 > 1.介绍 > > ECMAScript(简称ES)的几个重要版本 > > ES5 : 2009年发布 > > ES6 2015年发布 ES20 ...
- 关于JavaScript的模块(CommonJS, AMD, CMD, ES6模块)的理解
Javascript模块化就是解决将代码进行分隔,作用域隔离,模块之间的依赖管理等多个方面问题. 这样的优点不言而喻:1.可维护性2.命名空间私有化,可以避免污染全局环境3.代码重用,通过模块可以方便 ...
- es6 混合commjs_详谈commonjs模块与es6模块的区别
到目前为止,已经实习了3个月的时间了.最近在面试,在面试题里面有题目涉及到模块循环加载的知识.趁着这个机会,将commonjs模块与es6模块之间一些重要的的区别做个总结.语法上有什么区别就不具体说了 ...
- JavaScript CommonJS 模块
JavaScript CommonJS 模块是一种使用 JavaScript 语言实现的模块化编程规范.它是在服务器端开发 Node.js 应用程序时使用最广泛的模块化方案之一. CommonJS 模 ...
- 【ES6(2015)】Module模块
文章目录 1. 模块化的发展 2. export 3. as 4. export default 5. import 1. 模块化的发展 随着前端的发展,web技术日趋成熟,js功能越来越多,代码量也 ...
- Node.js b站教学视频汇总笔记(完)CommonJS模块规范、 require、npm、Express(中间件)、MongoDB、MySQL
文章目录 Node.js b站教学视频汇总笔记(完)CommonJS模块规范. require.npm.Express(中间件).MongoDB.MySQL 1. Node介绍 为什么要学习Node. ...
最新文章
- Makefile常用信息查询页
- 我所理解的RESTful Web API [设计篇]
- IAR的const,变量指定绝对地址,函数指定存取区域
- 利用JPEG制作更快,更准确的神经网络
- 2014年2月份第3周51Aspx源码发布详情
- 多看 android6,多看阅读本地版
- c语言e怎么表示_来测测!这11个C语言入门基础知识你都掌握了吗?
- NYOJ-水池数目(bfs)
- java 判断字符串是否汉子_java判断 字符串 是否有汉字
- 嵌入式系统开发之中断控制的实现
- Python basemap模拟导弹发射
- 卸载McAfee for Mac
- 文献阅读---普通狗牙根阳江基因组单倍型解析与基因组稳定性和匍匐性研究
- Flink统计日志图片信息并降序排序
- 上网本丢失F盘怎么恢复
- 前端性能测试(一):CPU
- 「 墙裂推荐」互联网人必备GIF制作的14种选择
- python爬虫库scrapy_使用Python爬虫Scrapy框架爬取数据
- JLINK的SWD接口调试器制作
- 超详细的商业智能BI知识分享,值得收藏