javascript模块化编程(1):为什么要用模块化编程

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

  一开始写代码的时候,我们可能只需要一个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-10-29 19:09:56

javascript模块化编程(1):为什么要用模块化编程的相关文章

网络编程——基于TCP协议的Socket编程,基于UDP协议的Socket编程

Socket编程 目前较为流行的网络编程模型是客户机/服务器通信模式 客户进程向服务器进程发出要求某种服务的请求,服务器进程响应该请求.如图所示,通常,一个服务器进程会同时为多个客户端进程服务,图中服务器进程B1同时为客户进程A1.A2和B2提供服务. Socket概述 ①   所谓Socket通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.应用程序通常通过“套接字”向网络发出请求或者应答网络请求. ②   Socket是连接运行在网络上的两个程序间的双向通信的端点. ③  

有人认为“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?

有人认为“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?首先,百度给出“银弹”是这样的解释:能杀死狼人的利器 在古老的传说里.狼人是不死的.想要杀死狼人有几种方法: 1.像杀死吸血鬼那样用木桩钉住狼人的心脏. 2.将月光遮住 3.用银子做的子弹射穿狼人的心脏或头 当然现实中是没有狼人的.但现实中确实有银弹这个东西.而其意义也类似于能杀死狼人的最好办法.现实中的狼人可以是一个棘手的项目,或者一件不可能的事.而“银弹”就是指能解决这些事的方法,或者技术手段. 我不认中文编程是

2.有人认为,“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么?

银色子弹(英文:Silver Bullet),或者称“银弹”“银质子弹”,指由纯银质或镀银的子弹.在欧洲民间传说及19世纪以来哥特小说风潮的影响下,银色子弹往往被描绘成具有驱魔功效的武器,是针对狼人等超自然怪物的特效武器.后来银色子弹常被用做致命武器的代言词.被比喻为具有极端有效性的解决方法,作为杀手锏[1]  .最强杀招.王牌等的代称. IBM大型机之父佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)在1986年发表的一篇关于软件工程的经典论文,便以<没有银弹:软件工程的本

C#编程总结(六)异步编程

C#编程总结(六)异步编程 1.什么是异步? 异步操作通常用于执行完成时间可能较长的任务,如打开大文件.连接远程计算机或查询数据库.异步操作在主应用程序线程以外的线程中执行.应用程序调用方法异步执行某个操作时,应用程序可在异步方法执行其任务时继续执行. 2.同步与异步的区别 同步(Synchronous):在执行某个操作时,应用程序必须等待该操作执行完成后才能继续执行. 异步(Asynchronous):在执行某个操作时,应用程序可在异步操作执行时继续执行.实质:异步操作,启动了新的线程,主线程

泛函编程(27)-泛函编程模式-Monad Transformer

经过了一段时间的学习,我们了解了一系列泛函数据类型.我们知道,在所有编程语言中,数据类型是支持软件编程的基础.同样,泛函数据类型Foldable,Monoid,Functor,Applicative,Traversable,Monad也是我们将来进入实际泛函编程的必需.在前面对这些数据类型的探讨中我们发现: 1.Monoid的主要用途是在进行折叠(Foldable)算法时对可折叠结构内元素进行函数施用(function application). 2.Functor可以对任何高阶数据类型F[_]

“中文编程”是解决中国程序员编程效率的秘密武器,这是一个银弹吗?

我不认为“中文编程”是解决中国程序员编程效率的秘密武器,也不是一个银弹. 1.中文字符比英文字符所占的内存大,运行起来比英文的慢: 2.中文容易出现的问题比较多,而且还存在兼容性: 3.大多时候,英文输入比中文快: 4.编程的快慢应该跟个人的习惯有关(就像有人用五笔打字快有人用拼音打字快一样),跟个人的编程能力有关. 当然,中文编程也给程序员带来了便利.可以解决程序员英文不好的问题,而且,如果实在不愿意学英文的话,还可以把用来学英文的时间用在研究程序上,让编程更上一层楼.但这些便利绝对不能说是银

关于“中文编程”是解决中国程序员编程效率的银弹的看法

讨论题目: 有人认为,“中文编程”是解决中国程序员编程效率的秘密武器,请问它是一个“银弹”么? 银弹被比喻为具有极端有效性的解决方法,作为杀手锏 .最强杀招.王牌等的代称.IBM大型机之父佛瑞德·布鲁克斯(Frederick P. Brooks, Jr.)在1986年发表的一篇关于软件工程的经典论文,便以<没有银弹:软件工程的本质性与附属性工作>(No Silver Bullet — Essence and Accidents of Software Engineering)为标题.其中的“银

java 网络编程-(1)引入网络编程

网络编程现在是非常普遍的编程技术了,网络编程无非就是两台或者多台设备(通常是计算机)之间的相互通信,相互之间的数据传输.网络编程的实质其实就是程序和程序之间的相互通信,相互传递数据.在网络通信中,第一次主动发起通信请求的成为客户端(Client),第一次通信中等待连接的称为服务器端(Server),在网络通信的过程中,Client端和Server端没有本质的区别. 那么,怎样才能通过客户端找到服务器从而进行网络通信呢?答案就是通过ip来找到服务器,我们都知道,服务器上运行着多个程序,也就是多个进

转 网络编程学习笔记一:Socket编程

网络编程学习笔记一:Socket编程 “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览器浏览网页时,浏览器的进程怎么与web服务器通信的?当你用QQ聊天时,QQ进程怎么与服务器或你好友所在的QQ进程通信?这些都得靠socket?那什么是socket?socket的类型有哪些?还有socket的基本函数,这些都是本文想介绍的.本文的主要内容如下:

编程范式,程序员的编程世界观

感谢作者,转载于: http://www.nowamagic.net/librarys/veda/detail/2488 编程范式(Programming Paradigm)是某种编程语言典型的编程风格或者说是编程方式.随着编程方法学和软件工程研究的深入,特别是OO思想的普及,范式 (Paradigm)以及编程范式等术语渐渐出现在人们面前.面向对象编程(OOP)常常被誉为是一种革命性的思想,正因为它不同于其他的各种编程范式. 编程范式也许是学习任何一门编程语言时要理解的最重要的术语. 托马斯.库