模块

在ES5中其实是没有模块的,只能通过各种方法来实现模块。

<script src="./js1.js"></script>
<script src="./js2.js"></script>
<script src="./main.js"></script>

//js1
window.module1 = function(){
  alert(1)
}
//js2
window.module2 = function(){
  alert(2)
}
//main
setTimeout(() => {
    window.module1()
}, 5000);

setTimeout(() => {
    window.module1()
}, 2000);

但是如果有js文件里有全局变量

//js1
var a=1
window.module1 = function(){
  alert(a)
}
//js2
var a=2
window.module2 = function(){
  alert(a)
}
//main
setTimeout(() => {
    window.module1()
}, 5000);

setTimeout(() => {
    window.module2()
}, 2000);

后加载的会覆盖先加载的
需要使用一个立即执行函数

!function(){
  var a=1
window.module1 = function(){
  alert(a)
  }
}

es6中使用花括号和let形成局部变量

{
  let a=1
window.module1 = function(){
  alert(a)
}
}

使用es6语法制作模块

//html
<script type = "module" src="./main.js"></script>

//xxx.js
let xxx = [1,2,3]
export default module

//js1.js
import xxx from './xxx.js'

let module1 = function(){
  alert(xxx)
}
export default module1

//js2.js
import xxx from './xxx.js'

let module2 = function(){
  alert(xxx)
}
export default module2

//main.js
import module1 from './js1.js'
import module2 from './js2.js'

setTimeout(() => {
    window.module1()
}, 5000);

setTimeout(() => {
    window.module2()
}, 2000);

html里引入使用了模块的文件要加上type="module",
js1,js2里使用‘export default module1’ 来导出
main里使用‘import module1 from './js1.js'’来导入
import 是 default时变量可以随意起。

也可以自定义导出

//导出模块
export {name,age,xxx}
export default module1

//导入模块
import {name,age,xxx} from '导出模块
import module from '导出模块'

自定义导出的时候名字必须相同。
但是导入多个模块时候,变量名有可能会重合。

//导出模块1
export {name,age,xxx}
export default module1

//导出模块2
export {name,age,xxx}
export default module2

//导入模块
import {name,age,xxx} from '导出模块1'
import module1 from '导出模块1'
import {name,age,xxx} from '导出模块2'
import module2 from '导出模块2'

此时会报错。
如果想同时引入不同模块,变量名相同时,使用as重命名变量。

import {name as name1} from '导出模块1'
import {name as name2} from '导出模块2'

也可以使用‘*’将要导出内容一次性导出。

import * as xxx from '导出模块'
//将要导出内容导入对象xxx里。

浏览器可能不支持import和export
这时可以使用babel webpack来解决。

前端模块化的意义

  1. 提高开发效率,有利于多人协同开发
  2. 解决文件依赖问题,无需考虑引用包顺序
  3. 避免全局变量污染
  4. 方便代码的复用和后期的维护

总结就是js填坑史。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 模块通常是指编程语言所提供的代码组织机制,利用此机制可将程序拆解为独立且通用的代码单元。所谓模块化主要是解决代码分...
    MapleLeafFall阅读 4,908评论 0 0
  • ES6模块不是对象,而是export命令显示指定输出的代码,输入时也采用静态命令的形式。 上面是从fs模块里加载3...
    竹天亮阅读 12,236评论 2 17
  • 第十三章 用模块封装代码 模块是自动运行在严格模式下并且没有办法退出运行的JavaScript代码,在模块顶部创建...
    NowhereToRun阅读 1,886评论 0 1
  • 前言 java有类文件,Python有import机制,Ruby有require等,而Javascript 通过 ...
    RayLeo阅读 4,202评论 0 4
  • 这些天一直在忙着读书,给自己充电。读书过程中内心总是充满着喜悦,我觉的整个人都好像变了,在家在单位都是特别...
    风和日丽的丽阅读 1,387评论 0 2

友情链接更多精彩内容