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

相关推荐
moonsims12 小时前
低空量子无人机
前端·数据结构
breeze jiang12 小时前
React + WebGPU 在浏览器运行 DeepSeek:从 Worker 通信到流式生成
前端·javascript·react.js
a11177612 小时前
家居生成器 Cartoon 开源项目 3D web
前端·开源
小林ixn12 小时前
前端卡顿终结者:用 useRef 把 Web Worker 请进 React 项目
前端·react.js·前端框架
sunly_12 小时前
React 三个重要概念:Ref、Props、State 详解
前端·javascript·react.js
weixin_4316004412 小时前
前端对接 SSE 的两种常见方式
前端·后端·学习·ai·sse·nest.js
Mh12 小时前
如何使用GSAP实现一个 `pinned` 滚动楼层叙事?
前端·javascript·css
Larcher18 小时前
React Router 不只是页面跳转:从 SPA 路由到权限守卫的完整实践
javascript·后端
Larcher19 小时前
大模型为什么每次回答都不一样?一文搞懂 Temperature、Top K 与 Top P
javascript·后端
用户9385156350721 小时前
从零在浏览器里跑 DeepSeek-R1:WebGPU + Transformer.js 全链路实战
前端·设计模式·typescript