es6和commonjs模块化规范的深入理解

总结:两种方式都是使用一个对象作为对外接口,es6使用的是Module这个实例对象,commonjs使用的是module.exprots这个对象。不同的是Module这个实例对象是不能直接操作的,而module.exports这是我们可以直接在js中操作的一个对象。

ES6模块化:

javascript 复制代码
const a = 1

function add(x,y) {
    return x+y
}

export {a}  // 注意这里并不是导出一个对象,而是导出数据的列表

export default add

将其在另一个模块中引入并打印在控制台的结果:

很容易看出,实际上export 和 export default做的事情并不是导出数据,而是向Module这个对象中添加数据。

CommonJS模块化:

这个规范的导出方式其实都是在操作module.exports这个对象,exports实际上只是提供的一个简写,exports也是指向module.exports这个对象的,我们可以直接操作这个对象,往这个对象里面添加属性,或者直接module.exports = {},直接导出一个新的对象。

两者的导入表象上来看都是从对象身上解构数据,es6模块化是从Module这个对象身上解构,commonjs是从module.exports这个对象上解构。但是冲命名的方式不一样,es6是as语法,commonjs是:

相关推荐
共享家95274 小时前
搭建 AI 聊天机器人:”我的人生我做主“
前端·javascript·css·python·pycharm·html·状态模式
Halo_tjn5 小时前
基于封装的专项 知识点
java·前端·python·算法
摘星编程6 小时前
OpenHarmony环境下React Native:自定义useTruncate文本截断
javascript·react native·react.js
Duang007_6 小时前
【LeetCodeHot100 超详细Agent启发版本】字母异位词分组 (Group Anagrams)
开发语言·javascript·人工智能·python
2601_949868368 小时前
Flutter for OpenHarmony 电子合同签署App实战 - 主入口实现
开发语言·javascript·flutter
m0_748229998 小时前
Vue2 vs Vue3:核心差异全解析
前端·javascript·vue.js
C澒8 小时前
前端监控系统的最佳实践
前端·安全·运维开发
xiaoxue..8 小时前
React 手写实现的 KeepAlive 组件
前端·javascript·react.js·面试
摘星编程8 小时前
在OpenHarmony上用React Native:自定义useHighlight关键词高亮
javascript·react native·react.js
hhy_smile8 小时前
Class in Python
java·前端·python