模块化开发目的是,把程序划分成一个个单独的有自己的逻辑代码、作用域、不会相互影响的代码文件,既可以按需暴露自己的变量、函数、对象给其他的模块使用,又可以通过某种方式导入其他模块的变量、函数、对象
总结:
模块就是,有独立作用域,可以导出和导入变量和函数的单独结构,目的是降低代码复杂度,方便管理
CommonJS是一个规范,在node.js和浏览器里均有实现,简称CJS。
CommonJS是一个同步的模块化方案,在浏览器中使用时,会阻塞页面加载,导致页面失去响应
exports/module.exports关键词实现导出require函数实现导入module.exports/exports对象上添加属性,实现模块导出require函数,获得上述模块的module.exports对象内存地址引用,便能读取使用到模块导出的变量或函数exports是一个空对象module是一个对象,并且有一个exports属性,内存指向了模块中的exports对象,所以初始化时,module.exports和exports是同一个内存引用,往两者上添加的属性是等价的module.exports指向一个新的对象时,module.exports和exports就不再是同一个内存引用,exports添加的属性不会被导出module.exports的指向的对象,而不是exports
ES6引入js原生的模块化方案,使用import 和export 关键词,实现模块隔离
与CommonJS的区别:
不能直接修改模块内变量,否则会抛出错误你可以在声明变量 X 之前,声明当前模块导出 X。
defualt是一个关键词,上面这样写与 export default 相同export {} 是一个语句,后面的花括号并不是一个对象,是用花括号括起来的用逗号分割的列表,不能使用对象增强语法 ,只能使用as重命名Import
按MDN的说法并不是一个函数,而是类函数的方式调用,它是一个关键词
