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是:

相关推荐
摸鱼老王不带819 小时前
不用后端,纯前端读出"网站眼里你的真实出口 IP"——聊聊 Cloudflare 的 cdn-cgi/trace
前端
程序员黑豆19 小时前
鸿蒙开发入门:Row 和 Column 布局组件详解
前端·harmonyos
hoLzwEge19 小时前
前端环境变量配置指南:.env 文件详解
前端·前端框架
猫头_19 小时前
AI 流式传输工程指南:有了 EventSource 为何还要 Fetch?
javascript·http·llm
hunterandroid20 小时前
Paging 3 RemoteMediator 实战:构建离线优先的分页列表
android·前端
Underwood_1720 小时前
星级评价——了解useState
前端
hunterandroid20 小时前
[鸿蒙从零到一] ArkUI 组件化实战:构建可复用、可组合的自定义组件
前端·华为·架构
一只公羊20 小时前
iPhone摄像头 在开发/调试过程中强行停止 App,导致 `AVCaptureSession` 没有被正常释放
前端
良木林20 小时前
滑动窗口 - LeetCode hot 100
javascript·算法·leetcode·双指针·滑动窗口
浮江雾20 小时前
Flutter第十节-----Flutter布局与组件全解析
android·开发语言·前端·学习·flutter·入门