commomJS模块:
1、获得的是缓存值,是对模块的拷贝
2、可以对commomJS模块重新赋值
3、可以对对象内部的值进行改变
es6模块:
1、获得的是时时的值,是对模块的引用
2、对es6模块重新赋值会报错
3、可以对对象内部的值进行改变
es6 {
export : '可以输出多个,输出方式为 {}' ,
export default : ' 只能输出一个 ,可以与export 同时输出,但是不建议这么做',
解析阶段确定对外输出的接口,解析阶段生成接口,
模块不是对象,加载的不是对象,
可以单独加载其中的某个接口(方法),
静态分析,动态引用,输出的是值的引用,值改变,引用也改变,即原来模块中的值改变则该加载的值也改变,
this 指向undefined
}
commonJS {
module.exports = ... : '只能输出一个,且后面的会覆盖上面的' ,
exports. ... : ' 可以输出多个',
运行阶段确定接口,运行时才会加载模块,
模块是对象,加载的是该对象,
加载的是整个模块,即将所有的接口全部加载进来,
输出是值的拷贝,即原来模块中的值改变不会影响已经加载的该值,
this 指向当前模块
}
面试题:请说下 export 和 export default 的区别
- export default 它是一个文件的 默认导出 模块 有且只有一个 一个文件中只能写一次哈
export default 可以 和 export 共存在一个文件中
function Counter() {
}
function Counter1() {
}
export default Counter;
像上面就是有问题
其次是 引入的时候 不用使用 结构的方式进行 引入 引入 是通过 import 的方式 引入的 引入必须是在文件的顶部 引入 否则报错
import Counter from './Counter.js'
- export 允许 一个文件导出的多个 接口
export const A = 10;
export const B = 20;
引入的时候 要是用 对象 接口的方式 推荐 哈 不过你也可以不用
import { A, B } from './a.js'
当然 我们也可以 引入 图片 和 样式文件
import './a.css';
import logo from './logo.png'
- 这下 就可以谈一谈 CommonJS 规范 就避不开 谈 nodejs 了
模块导出 可以 使用 module.exports 或者 直接使用 exports
一个文件中 碰见 module.exports 可以就不会导出下面的
其实有点 类似js中的原型对象一样 注意 一般还是第二中的导出方式 用的可能比较多
或者就是
modul.exports = { A, B ,C } 这种方式
// 第一种导出
const A = 10;
module.exports = A;
// 第二种导出
exports.A = 10;
exports.B = 10;
exports.C = 10;
文件的引入 也分别对应上面的 两种导入
var a = require('./test');
console.log(a);
// 第一种 导出 打印的结果 是 10
// 第二种 导出 打印的结果是 { A : 10, B: 10, C: 10 }