js模块历程
来源:互联网 发布:restful框架 php 编辑:程序博客网 时间:2024/06/08 07:07
点击打开链接
1. 全局变量的灾难
小明定义了 i=1
小刚在后续的代码里:i=0
小明在接下来的代码里:if(i==1){...} //悲剧
2. 函数命名冲突
项目中通常会把一些通用的函数封装成一个文件,常见的名字有utils.js、common.js...
小明定义了一个函数:function formatData(){ }
小刚想实现类似功能,于是这么写:function formatData2(){ }
小光又有一个类似功能,于是:function formatData3(){ }
......
避免命名冲突就只能这样靠丑陋的方式人肉进行。
3. 依赖关系不好管理
b.js依赖a.js,标签的书写顺序必须是
萌芽时代的解决方案:
1. 用自执行函数来包装代码
modA = function(){ var a,b; //变量a、b外部不可见 return { add : function(c){ a + b + c; }, format: function(){ //...... } }}()
这样function内部的变量就对全局隐藏了,达到是封装的目的。但是这样还是有缺陷的,modA这个变量还是暴漏到全局了,随着模块的增多,全局变量还是会越来越多。
2. java风格的命名空间
为了避免全局变量造成的冲突,人们想到或许可以用多级命名空间来进行管理,于是,代码就变成了这个风格:
app.util.modA = xxx;app.tools.modA = xxx;app.tools.modA.format = xxx;
Yahoo的YUI早期就是这么做的,调用的时候不得不这么写:
app.tools.modA.format();
这样调用函数,写写都会觉得恶心,所以这种方式并没有被很多人采用,YUI后来也不用这种方式了。
3. jQuery风格的匿名自执行函数
(function(window){ //代码 window.jQuery = window.$ = jQuery;//通过给window添加属性而暴漏到全局})(window);
jQuery的封装风格曾经被很多框架模仿,通过匿名函数包装代码,所依赖的外部变量传给这个函数,在函数内部可以使用这些依赖,然后在函数的最后把模块自身暴漏给window。
如果需要添加扩展,则可以作为jQuery的插件,把它挂载到$上。
这种风格虽然灵活了些,但并未解决根本问题:所需依赖还是得外部提前提供、还是增加了全局变量。
阅读全文
0 0
- js模块历程
- Node.js的学习历程三模块的认识
- Node.js学习历程
- js模块化历程
- js 模块化历程
- js模块化历程
- js模块化历程
- js模块
- js 模块
- js模块
- zend历程 之 多模块控制器
- 探索iptables BPF模块的悲惨历程
- 问卷调查模块实现的过程中的历程
- [置顶] 一道js题 的分析历程
- 历程
- 历程
- 历程
- 历程
- MIPI-DSI 三种 Video Mode 理解
- 字母和数字键的键码值(KeyCode)
- 学习seo教程需要学习更需要提升
- java 生成2维码
- 【高效代码调错系列之代码规范】——让软件学会自己寻找缺陷
- js模块历程
- 习题6.4
- Android 签名打包出现的错误的解决方法以及代码中获取应用签名信息方法
- POJ 3255
- ARM概述
- Redhat(红帽)yum 源更新出现database disk image is malformed
- 小程序支付绑定服务号支付步骤,微信小程序支付绑定商户号支付
- Ubuntu用户、用户组管理命令
- AT&T汇编学习总结二-汇编语言程序范例