【读书笔记】JavaScript解决全局变量冲突
来源:互联网 发布:c 多文件编程问题 编辑:程序博客网 时间:2024/06/05 10:39
《编写高质量代码——Web前端开发修炼之道》
1、思路:使用匿名函数,设置全局对象GLOBAL,在每个匿名函数里面声明一个不同的命名空间,把属性挂在命名空间下。
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>使用命名空间</title></head><body> <div>XXXXXXXXXXX</div> <script type="text/javascript"> var GLOBAL = {}; (function(){ var a = 123,b = "hello world"; GLOBAL.A = {}; GLOBAL.A.str2 = a; GLOBAL.A.str = b; })(); (function(){ var a,c="abc"; GLOBAL.B={}; GLOBAL.B.str=c; })(); (function(){ var a=GLOBAL.A.str2,b=GLOBAL.A.str; var d="aaaaa"; d=b+", "+d+a; GLOBAL.C={}; GLOBAL.C.str=d; })(); (function(){ var test=GLOBAL.B.str; alert(test); var test2=GLOBAL.C.str; alert(test2); })(); </script></body></html>
2、当然也要避免命名空间的冲突,那么就用函数来生成这些命名空间:
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>使用命名空间</title></head><body> <div>XXXXXXXXXXX</div> <script type="text/javascript"> var GLOBAL = {}; GLOBAL.namespace = function(str){ var arr=str.split("."), o=GLOBAL; //原书中有错误,应该是三等号。 for(i=(arr[0]==="GLOBAL")?1:0;i<arr.length;i++){ //这么写的(重要):如果CAT已经存在,不会覆盖这个CAT,而是在前一个CAT的基础上添加。如果直接用o[arr[i]]={};GLOBAL.namespace("A.CAT.CAT1");GLOBAL.namespace("A.CAT.DOG3"); 前面的CAT会被后面的CAT覆盖 o[arr[i]]=o[arr[i]]||{}; o=o[arr[i]]; } }; (function(){ var a = 123,b = "hello world"; GLOBAL.namespace("A.CAT");//感觉这样生成命名空间就比较方便。不用再定义命名空间A了。否则应该这样写GLOBAL.A = {};GLOBAL.A.CAT = {}; GLOBAL.A.CAT.name="panda"; GLOBAL.A.CAT.age=a; GLOBAL.A.str2 =a; GLOBAL.A.str=b; })(); (function(){ var test3 =GLOBAL.A.CAT.age; console.log(test3);//123 var test3 =GLOBAL.A.CAT.name; console.log(test3);//panda })(); </script></body></html>
0 0
- 【读书笔记】JavaScript解决全局变量冲突
- 解决js和其他库$全局变量冲突
- Android读书笔记----滑动冲突的解决方式
- javascript解决鼠标单击双击冲突方法
- 解决JavaScript库命名冲突问题 noConflict
- JS 全局变量冲突。
- javascript 全局变量
- JavaScript 全局变量
- JavaSCript全局变量
- JavaScript 全局变量
- 解决冲突(避免冲突)
- JQuery和其他JavaScript库冲突的解决方式
- 解决jQuery和其他JavaScript库中中$()函数的冲突
- 解决冲突
- 解决冲突
- 解决冲突
- 解决冲突
- 解决冲突
- Android 资源名获取资源ID的两种实现方式-附带例子说明
- OPC实现方式-----OPC(第二篇)
- 建议83:小心Parallel中的陷阱
- leetcode围棋问题
- 如何解决万能地图下载器下载的地图和选择范围不一致
- 【读书笔记】JavaScript解决全局变量冲突
- 解决Java7下JTextPane不能自动换行的问题
- 瑞尼—记录事实真相的使者
- hibernate里的Transient注解的位置
- 文章标题
- Android AsyncTask完全解析,带你从源码的角度彻底理解
- LeetCode 152. Maximum Product Subarray
- 误删文件恢复
- C语言多线程