用模块化编程

用模块化编程

最近想边学边整一下模块化编程,那么先从为何要使用模块化编程说起吧,可能你刚听说模块化编程,也没有关系,本篇讲的是很基础的东西。

  一开始写代码的时候,我们可能只需要一个js文件,去实现一个很小的功能,比如下面这样:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title> javascript模块化 </title>
    <style type="text/css">
    </style>
  </head>
  <body>
    <script>
      function add(a, b) {
        return a + b;
      }

      var ans = [];
      for(var i = 0; i < 5; i++) {
        var a = Math.random();
        var b = Math.random();
        var c = add(a, b);
        console.log(c);
        ans.push(c);
      }
    </script>
  </body>
</html>

  这段代码初始化了5个-2~2之间的数据,并存放在ans数组里。随着代码量的增加,你会渐渐发现把代码写在一个js文件中会很繁琐,于是我们写了好几个js文件,如上代码把函数写在一个script标签内,同时把初始化写在另一个script标签内,如下:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title> javascript模块化 </title>
    <style type="text/css">
    </style>
  </head>
  <body>
    <script>
      function add(a, b) {
        return a + b;
      }
    </script>
    <script>
      var ans = [];
      for(var i = 0; i < 5; i++) {
        var a = Math.random();
        var b = Math.random();
        var c = add(a, b);
        console.log(c);
        ans.push(c);
      }
    </script>
  </body>
</html>

  我们把两个js片段写在了一个html文件中,但是通常我们不会这么做,我们会把它们写在两个js文件中然后在html中引用,这里就不提了。

  如上代码有什么问题吗?通常情况下,代码中的全局变量对我们来说是越少越好,但是如上代码暴露了a、b、c以及i四个我们不需要的全局变量,我们需要的只是一个初始化成功的ans数组以供后面的代码使用,也就是说第二个script的片段我们只需要一个ans变量的值,如何?一个很简单的方法便是写一个自动执行函数,因为只有函数里的变量才是局部变量:

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title> javascript模块化 </title>
    <style type="text/css">
    </style>
  </head>
  <body>
    <script>
      function add(a, b) {
        return a + b;
      }
    </script>
    <script>
      (function() {
        window.ans = [];
        for(var i = 0; i < 5; i++) {
          var a = Math.random();
          var b = Math.random();
          var c = add(a, b);
          ans.push(c);
        }
      }());
    </script>
    <script>
      console.log(a); // 报错
      console.log(b); // 报错
      console.log(c); // 报错
      console.log(i); // undefined
      for(var i = 0; i < 5; i++)
        console.log(ans[i])
    </script>
  </body>
</html>

  第二个script标签内的代码便是一种简单的模块化机制,不同的是实际生产中通常将所需要的值直接返回或是暴露在接口下,而非采用全局变量的方式。我们看到用了模块化的写法,世界仿佛干净了许多,我们只需提供需要的变量,而不用去管其他的东西。

  简单了解了为何要使用模块化的原因,那么第二篇接着会来学习下模块化的几种经典写法~

时间: 2024-12-16 03:03:27

用模块化编程的相关文章

从273二手车的M站点初探js模块化编程

前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数据. 273这个M站点是产品推荐我看的.第一眼看这个产品时我就再想他们这个三次加载和翻页按钮的方式,那么小分页的pageIndex是怎么计算的.所以就顺便看了下源码. 提到看源码时用到了Chrome浏览器的格式化工具(还是朋友推荐我的,不过这个格式化按钮的确不明显,不会的话自行百度). 三次加载和分

Javascript模块化编程(二):AMD规范

作者: 阮一峰 日期: 2012年10月30日 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 但是,这样做有一个前提,那就是大家必须以同样的方式编写模块,否则你有你的写法,我有我的写法,岂不是乱了套!考虑到Javascript模块现在还没有官方规范,这一点就更重要了. 目前,通行的Javascript模块规范共有两种

JS的模块化编程

今天学了一下JS的模块化编程,感觉JavaScript真的是博大精深,CommonJS,requireJS,NodeJS,Seajs,在此记录一下经验.JavaScript设计之初并不是一种模块化编程语言,不支'类'和'模块'的概念,但ES6中却将正式支持"类"和"模块".有了模块,我们可以更方便地使用别人的代码,想要什么功能,就加载什么模块. 不过这样做的前提是大家必须以同样的方式编写模块,考虑到Javascript模块现在还没有官方规范,因此各种规范应运而生.

黑马程序员---C基础6【#include指令】【模块化编程】【计算机的进制】【原码、反码、补码】【位运算符】

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- [#include指令] 1.文件包含命令的格式: 1)#include “”双引号是包含用户自己书写定义的文件(可以是头文件,也可以是普通的文件)#include是预处理指令,不是一个语句,不需要加封号 2)#include<>   包含一个系统(编译器自带)的头文件 2.文件包含的实质: 把指定文件内容插入该命令行位置取代该命令行, include不一定非要写在第一行: 3.includ

模块化编程:阮一峰 模块化编程

由于一个页面写的js太多了,都写在一个文件中,不好调试.所以我的目标就是如何能把所需的js文件,分割成易于维护的代码块,之间能相互调用方法和属性.虽然采用命名空间也能应付,但是不知道什么才是最好的做法. 看了这一系列文章,感觉是处理模块间的依赖关系.这也确实是需要做的事情,比如使用jquery UI,bootstrap等好用的库时,就需要处理好模块的关系. javascripts模块化编程(一):模块的写法 一.原始写法:函数的堆积 二.对象写法:会暴露所有的模块成员 三.立即执行函数:不暴露私

Javascript模块化编程(一):模块的写法

作者: 阮一峰 日期: 2012年10月26日 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑. Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,它不支持"类&qu

Javascript模块化编程

(一):模块的写法 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者不得不使用软件工程的方法,管理网页的业务逻辑. Javascript模块化编程,已经成为一个迫切的需求.理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,它不支持"类"(class),更遑论"模块"(module)了.(正在制定中的ECMAScript标准第六版,将正式支持"

使用requireJS实现模块化编程

RequireJS是一个工具库,主要用于客户端的模块管理.他可以让客户端的代码分成一个个模块,实现异步或动态加载,从而提高代码的性能和可维护性.他的模块管理遵守AMD规范(Asynchronous Module Definition). RequireJS的基本思想就是:通过define方法,将代码定义为模块:通过require方法,实现代码的模块加载. 第一步,将requirejs.js文件使用script标签嵌入到网页,然后即可以使用requireJS进行模块化编程. <script dat

嵌入式 Linux C语言(十一)——C语言模块化编程

嵌入式 Linux C语言(十一)--C语言模块化编程 一.C语言模块化编程 所谓模块化编程,就是指一个程序包含多个源文件(.c 文件和 .h 文件),每个模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明.C语言模块化编程中对.c..h文件的潜规则: 1..c 文件主要负责实现,也就是定义函数:.h 文件主要负责声明,比如函数声明.宏定义等,结构的定义.自定义数据类型一般也放在头文件中,不能在.h文件中定义变量.将一个功能模块的代码单独编写成一个.c文件,然后把该