原文

  简书原文:https://www.jianshu.com/p/d5fc38506bc4

大纲

  1、什么是模块?
  2、基本的模块模式
  3、模块模式概念
  4、模块结构
  5、揭示模式
  6、模块编程的意义
  7、模块化编程的重要性

1、什么是模块?

  通常模块(Module)是指某个更大结构的一部分或组件。然而,模块术语依据不同上下文,甚至在软件开发范畴内,都可以用不同含义。有时我们会听到人们在一般意义层面讨论模块。比如,他们可能说“支付模块”或者“旅行计划模块”。这时候模块意指整体特性是完全没有什么问题的。而在我们特指JavaScript代码块的时候,模块就代表一个函数——一个通过模块模式创建的特定函数。

2、基本的模块模式

3、模块模式概念

3.1、命名空间

  命名空间是一种为一组相关成员提供具体作用域的方式。尽管命名空间当前并非JavaScript语言的一部分,但仍可以通过为更大作用域的任何变量(如全局变量)分配模块函数来达到同样效果。

3.2、匿名函数表达式

  函数表达式是表达式的一部分,且不以function关键字开头。如果函数表达式未命名,则被称为匿名函数表达式。模块体包含在一个匿名函数表达式当中。

3.3、对象字面量

  JavaScript提供了一种创建对象的快捷方式,被称为字面量标记法,其通过花括号声明一个对象,它的Property用键值对来表示。

3.4、闭包

  通常,当函数执行完毕,在其中创建的任何局部变量的生命周期也就宣告结束。闭包则是一个例外情况,当函数包含了外层作用域的变量引用时,例外就发生了。在JavaScript中,每个函数也都有一个外层作用域,即使外层作用域恰好就是全局作用域(所以从技术角度来讲,所有函数都是闭包)。闭包对于我们的讨论内容是非常重要的,因为即使模块模式的外层函数立即执行完毕,只要模块仍在使用,外层函数返回语句所引用作用域链之上的任何对象或值,都无法被垃圾回收。

4、模块结构

  模块结构巧妙地使用一个函数作为封装其逻辑的容器。这是可能的,因为在模块中局部声明变量及函数可以避免模块外部直接访问它们。模块内部功能的访问可以通过访问语句暴露的内容来控制。

5、揭示模式

  模块模式的吸引力之一就是在模块内部功能与公开功能之间划定了清晰的界限。有一种频繁用到并能够让划分更加清晰的改良版模块模式——揭示模式(revealing module pattern)。
  其实现思路是:将任何API所需代码移到内部,将公有函数作为纯粹指向内部代码的指针,并只暴露该公有函数。

6、模块编程的意义

6.1、避免命名冲突

  不用模块限制函数作用域,把函数一股脑地放进全局作用域,将很容易导致命名冲突
  模块模式能够让你按自己意愿命名变量或函数,而不用担心不同模块代码间会产生命名冲突问题

6.2、保护代码完整性

  在某些语言中,访问某部分应用程序代码可以通过注入public或private这样的访问修饰符来控制。而在JavaScript中private是保留关键字。我们仍然可以通过模块模式限定变量和函数的访问权限。这是可能的,因为在某个函数里声明的变量和函数,意味着它们的作用域已限制为容器函数。这种限制访问某部分模块代码的能力将组织其他代码直接改变其内部状态,维系模块内部正常运作,并避免模块数据遭到肆意修改导致违背其预期目的。
正确编写安全的代码难度很大。如果你无法阻止代码内逻辑的错误使用,编写安全代码的希望就愈发渺茫。模块模式提供了一种管理内部代码访问性的方式。

6.3、隐藏复杂性

  当讨论隐藏编程复杂度时,并非说我们想讨论如何保守秘密或者如何增加安全性。我们要讨论的是两种方式的差异性:通过大量全局函数实现具体功能的复杂逻辑,以及将复杂逻辑放至内部并只通过公有接口暴露开发者所需功能。后者减少了混乱,并使得函数调用更加清晰起来,以正确使用应用功能。

7、模块化编程的重要性

  模块化编程最重要的思想:通过模块模式来内化逻辑复杂性并提供功能对应公有API,这是JavaScript的封装实现方式。
模块化的代码能够将应用逻辑组织成单一目标的更小单元,其更容易管理及修改。毫无疑问这带来了更好的可重用性。模块还有助于保持数据完整性、代码组织以及避免命名冲突。毕竟我们为无刷新的单一页面编写代码,如果不按这种设计方式编写代码,纯粹依赖全局变量和函数的话,代码将很快变得难以管理。

《SPA设计与架构》之JavaScript模块化的更多相关文章

  1. 《SPA设计与架构》之认识SPA

    原文 简书原文:https://www.jianshu.com/p/84323f530223 大纲 前言 1.什么是单页面应用程序(SPA) 2.SPA与传统Web应用的区别 3.关于SPA的使用 4 ...

  2. 《SPA设计与架构》之MV*框架

    原文 简书原文:https://www.jianshu.com/p/39f8f0aefdc2 大纲 1.认识MV*框架 2.传统UI设计模式 3.对框架的本质认识——框架有效性和框架分类 4.MV*基 ...

  3. 《SPA设计与架构》之客户端路由

    原文 简书原文:https://www.jianshu.com/p/4d83475f71da 大纲 1.传统路由 2.SPA导航 3.客户端路由器的工作机制 1.传统路由 在传统Web应用程序中,导航 ...

  4. Javascript模块化开发,使用模块化脚本加载工具RequireJS,提高你代码的速度和质量。

    随着前端JavaScript代码越来越重,如何组织JavaScript代码变得非常重要,好的组织方式,可以让别人和自己很好的理解代码,也便于维护和测试.模块化是一种非常好的代码组织方式,本文试着对Ja ...

  5. Javascript模块化规范

    Javascript模块化规范 一.前端js模块化由来与演变 CommonJS 原来叫 ServerJS,推出 Modules/1.0 规范后,在 Node.js 等环境下取得了很不错的实践.09年下 ...

  6. 深入了解Javascript模块化编程

    本文译自Ben Cherry的<JavaScript Module Pattern: In-Depth>.虽然个人不太认同js中私有变量存在的必要性,但是本文非常全面地介绍了Javascr ...

  7. JavaScript模块化---AMD规范

    JavaSript模块化 在了解AMD,CMD规范前,还是需要先来简单地了解下什么是模块化,模块化开发?     模块化是指在解决某一个复杂问题或者一系列的杂糅问题时,依照一种分类的思维把问 题进行系 ...

  8. 知识点【JavaScript模块化】

    JavaScript模块化历程 JavaScript发展变迁大概是一下几个步骤: 工具(浏览器兼容) 组件(功能模块) 框架(功能模块组织) 应用(业务模块组织) 但是经过了长长的后天努力过程Java ...

  9. 关于Javascript模块化和命名空间管理的问题说明

    最近闲下来的时候,稍微想了想这个问题.关于Javascript模块化和命名空间管理 [关于模块化以及为什么要模块化] 先说说我们为什么要模块化吧.其实这还是和编码思想和代码管理的便利度相关(没有提及名 ...

随机推荐

  1. CSS3:元素的边框、背景和大小

    边框 和边框相关的属性例如以下. border-width 用于设置边框的宽度,可选择包含: 1)<长度值>:将边框宽度设为以CSS度量单位(如em.px.cm)表达的长度值. 2)< ...

  2. mahout历史(二)

    mahout历史 Apache Mahout起源于2008年,经过两年的发展,2010年4月ApacheMahout最终成为了Apache的顶级项目.Mahout 项目是由 ApacheLucene( ...

  3. IntelliJ IDEA 启动tomcat 报错: idea Unable to open debugger port (127.0.0.1:58233): java.net.SocketException "socket closed"

    debug启动项目弹出提示 Error running omp: Unable to open debugger port (127.0.0.1:50812): java.net.SocketExce ...

  4. canvas和svg区别

    什么是 Canvas? HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像. 画布是一个矩形区域,您可以控制其每一像素. canvas 拥有多种绘制路径.矩形.圆形.字符以 ...

  5. android插件式开发资料整理

    1.DL : Apk动态载入框架 2.android中的动态载入机制

  6. linux下多进程的文件拷贝与进程相关的一些基础知识

    之前实现了用文件IO的方式能够实现文件的拷贝,那么对于进程而言,我们是否也能够实现呢? 答案是肯定的. 进程资源: 首先我们先回想一下,进程的执行须要哪些资源呢?其资源包含CPU资源,内存资源,当然还 ...

  7. Java基础学习总结(53)——HTTPS 理论详解与实践

    前言 在进行 HTTP 通信时,信息可能会监听.服务器或客户端身份伪装等安全问题,HTTPS 则能有效解决这些问题.在使用原始的HTTP连接的时候,因为服务器与用户之间是直接进行的明文传输,导致了用户 ...

  8. 对于学习apache软件基金会顶级项目源码的一点思路(转)

    ASF的开源项目,为软件行业贡献了太多好的产品和软件思维.学习ASF的项目源码能很大的提升自身的能力.程序运行在服务器上的流程:执行启动脚本(start.sh) -> 指向程序的主方法 -> ...

  9. HDU——T 3501 Calculation 2

    http://acm.hdu.edu.cn/showproblem.php?pid=3501 Time Limit: 2000/1000 MS (Java/Others)    Memory Limi ...

  10. Stable Matching (Gale Sharpley Algorithm)

    稳定婚配问题:n个男生n个女生.当中每一个人都有自己心仪的列表. 问怎样达成稳定的匹配(比方, b想B求婚,可是B已有的对象的优先级高于b,此时b的魅力不足以拆散B所处的那一对,即达到稳定状态.) ( ...