模块化开发

模块化开发



一、为什么要模块化



假设一个公司几个人同时去开发一个项目,那么就会存在一个弊端 —— 会出现变量同名的情况(这样就会导致程序内部出现问题)



代码演示

//主页代码,用来汇总各个开发人员的代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

//假设这是==小红==开发的代码
<script src="aaa.js"></script>

//假设这是==小强==开发的代码
<script src="bbb.js"></script>

/假设/这是==小红==开发的代码
<script src="mmm.js"></script>

</body>
</html>




//小红开发的代码  aaa.js

var name = '小红'
var flag = true

function(num1,num2){
	if(flag){
		return num1+num2;
	}
}
//小强开发的代码  bbb.js

var name = '小强'

//此处的代码的变量名命名与小红的变量命名重名了
var flag = false

//小红开发的代码  mmm.js

var name = '小红'

if(flag){
    console.log('小红是天才');
}



结果就导致小红的代码出现了问题,本来自己定义过一个变量 flag ,但是却无法打印 ‘小红是天才’ 等几个字样

这样就出现了变量重名的问题,为了解决这个问题,就是用到了模块化




二、解决方案



方案一:使用匿名函数的方式

代码演示

//主页代码,用来汇总各个开发人员的代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

//假设这是==小红==开发的代码
<script src="aaa.js"></script>

//假设这是==小强==开发的代码
<script src="bbb.js"></script>

/假设/这是==小红==开发的代码
<script src="mmm.js"></script>

</body>
</html>




//小红开发的代码  aaa.js

(function(){
var name = '小红'
var flag = true

function(num1,num2){
	if(flag){
		return num1+num2;
	}
}
})()
//小强开发的代码  bbb.js

(function(){
var name = '小强'

//此处的代码的变量名命名与小红的变量命名重名了
var flag = false
})()
//小红开发的代码  mmm.js

(function(){
var name = '小红'

if(flag){
    console.log('小红是天才');
}
})()



这样看似解决了问题,但是大大降低了代码的复用性,使得自己在一个 js 里边的定义的变量,不能在其他 js 文件里边进行使用了



方案二:使用对象进行导出



代码演示

//主页代码,用来汇总各个开发人员的代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

//假设这是==小红==开发的代码
<script src="aaa.js"></script>

//假设这是==小强==开发的代码
<script src="bbb.js"></script>

/假设/这是==小红==开发的代码
<script src="mmm.js"></script>

</body>
</html>





//小红开发的代码  aaa.js

var modelA = (function(){

//定义一个对象用来进行保存数据
var obj = {}

var name = '小红'
var flag = true

function(num1,num2){
	if(flag){
		return num1+num2;
	}
}

//给对象进行赋值
obj.flag = flag;
obj.name = name;

return obj;


})()

//小强开发的代码  bbb.js

var modelB = (function(){
var name = '小强'

//定义一个对象用来进行保存数据
var obj = {}

//此处的代码的变量名命名与小红的变量命名重名了
var flag = false
obj.name = name;

return obj;

})()
//小红开发的代码  mmm.js

var modelC = (function(){

//定义一个对象用来进行保存数据
var obj = {}

var name = '小红'

if(modelA.flag){
    console.log('小红是天才');
}

obj.name = name;

return obj;

})()




三、常见模块化的规范



现在市面上已经有模块化的工具了,就不需要我们自己来定义了,我们直接拿过来使用即可,常见的模块化工具如下:

CommonJS、AMD、CMD,也有 ES6 的Modules

这里我们只介绍两个工具


1. CommonJS

在这里插入图片描述




2.ES6 模块化的导出和导入



2.1导出


2.2.1 用于导出变量


在这里插入图片描述




2.2.2 用于导出函数或类


在这里插入图片描述



2.2.3 export default 的用法

在这里插入图片描述



2.2导入

在这里插入图片描述



代码演示

//HTML代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<script src="aaa.js" type="module"></script>
<script src="bbb.js" type="module"></script>
<script src="mmm.js" type="module"></script>

</body>
</html>

//导出代码
//小明开发的文件
var name = '小明'
var age = 18
var flag = true

function sum(num1,num2){
    return num1+num2
}

if(flag){
    console.log(sum(20, 30));
}

//模块化导出
//1.导出方式一(定义完变量和方法最后一起导出)
export {
    flag,
    sum,
}

//2.导出方式二(在定义变量的时候直接导出)
export var num1 = 1000;
export var height = 1.88

//3.导出方式三(导出函数/类)
export function mul(num1,num2) {
    return num1*num2;
}

export class Person {
    run(){
        console.log('在奔跑');
    }
}

//4.导出方式四(export default)(默认导出方式,导出的时候不需要起名字  当使用者导入该文件时需要自己来进行命名且不加 {} )
//默认方式导出函数

export default function () {//函数不需要起名字
    console.log('在大叫');
}

//导入代码
//小明开发的文件

//模块化导入

//1.导入{}中定义的变量
import {flag,sum} from "./aaa.js";

if(flag){
    console.log('小明是天才');
}

console.log(sum(100, 200));

//2.直接导入export定义的变量
import {num1,height} from "./aaa.js";

console.log(num1);
console.log(height);

//3.导入 export 的 function/class
import  {mul,Person} from "./aaa.js";

console.log(mul(30, 50));
const p =new Person()
p.run()

//4.导入 export default 中的内容
import shout from "./aaa.js"
shout()


//5.统一全部导入
import * as aaa from "./aaa.js" //aaa为导入的对象所起的别名  使用起属性和方法时  格式:(aaa.属性/方法)的形式

console.log(aaa.flag);
console.log(aaa.height);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值