js模块化编程 require.js
随着互联网的不断发展,web前段的工作越来越多,作为前段一个很重要的工作就是js,但是随着页面功能的复杂化,多样化,我们会发现一个很显而易见的问题,就是一个功能,在多个页面都有用到,例如一个见到的计算
var aty = function (x, y) {
return (x * y);
};
比如这样的代码,我们要在多个页面用到我们能怎么做哪,
第一就是复制代码,每个页面都粘贴一份,这样就造成了有多个源文件,而且造成了大量的代码浪费,
而且如果我们的需求有变,现在不做乘法运算了,要改成
var aty = function (x, y) {
return (x + y);
};
这样怎么办,只能每个页面在改一次,非常的不利于代码的维护,
第二就是把代码做成一个文件,每个页面调用一次就可以了,这样代码就不会有浪费了,
但是这里还是有一个问题,如果这个代码,要是很大的话,就会照成浏览器的假死现象,而且要是这个页面对其他js文件有依赖关系,如果在这个文件所依赖的js没有加载完成的时候运行,就会出错,
基于上面的问题,js出现了模块化编程require.js
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript" defer async="true"></script>
<script src="Scripts/r.js" type="text/javascript" defer async="true"></script>
<script src="Scripts/r.js" type="text/javascript" data-main="/main.js"></script>
</head>
<body>
<script type="text/javascript">
</script>
</body>
</html>
<script src="Scripts/r.js" type="text/javascript" defer async="true"></script>
这句话的意识就是一部加载require.js文件,defer async="true"是为了做兼容,因为ie只支持defer
<script src="Scripts/r.js" type="text/javascript" data-main="/main.js"></script>
这句话就是加载这个页面的主js文件,这个js里面放的是对其他模块的调用
require.config({
paths: {
}
});
require(['mia'], function (mia) {
alert(mia.aty(6, 6));
alert(mia.add(4, 6));
});
require(['mia'], function (mia) {
}
这个方法分为两部分,['mia']是依赖的文件,function (mia) {
}就是一个回调函数,单这个依赖文件加载完成的时候回调,
define(function () {
var aty = function (x, y) {
return (x * y);
};
var add = function (x, y) {
return (x + y);
};
return {
aty: aty,
add: add
};
});
这个就是js模块了,注意使用了 require.js就要准照他的标准,模块必须用 define开始,define支持依赖关系,而且一个js文件模块只能有一个define多了其他的不会执行,
,下面是我文件的关系,
页面文件
每个文件的代码为:
主js
模块js


浙公网安备 33010602011771号