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

 

 

posted @ 2014-04-16 18:13  瀚海行舟  阅读(156)  评论(0)    收藏  举报