【读书笔记】JavaScript解决全局变量冲突
2016-09-07 14:52
260 查看
《编写高质量代码——Web前端开发修炼之道》
1、思路:使用匿名函数,设置全局对象GLOBAL,在每个匿名函数里面声明一个不同的命名空间,把属性挂在命名空间下。
2、当然也要避免命名空间的冲突,那么就用函数来生成这些命名空间:
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>
相关文章推荐
- javascript中运用闭包和自执行函数解决大量的全局变量问题
- javascript中运用闭包和自执行函数解决大量的全局变量问题
- 面试小汇总-(javascript/jQuery怎么防止全局变量污染和fn名称冲突?)
- 通过Javascript code modules在XUL文件之间使用全局变量
- javascript框架之全局变量
- javascript的全局变量和局部变量
- 用JavaScript实现全局替换,解决$等特殊符号的难题
- 《汇编语言》读书笔记(6)——解决子程序与主程序使用的寄存器的冲突
- 认清JavaScript和JAVA全局变量和局部变量的作用域
- JavaScript 全局变量与作用域
- JavaScript中全局变量、函数内变量以及常量表达式的效率测试
- 验证控件和javascript冲突的解决办法
- javascript 的作用域及全局变量(zhuan)
- Javascript最佳实践-应用Module Pattern>尽量减少全局变量
- 详解Javascript框架中的全局变量
- Firefox - 附加软件 - Firebug - DOM视图 - 借助Show User-defined Properties选项查看javascript全局变量
- 解决了c#捕获sql错误号的问题和将sql连接用application放在global中作全局变量问题
- 验证控件和javascript冲突的解决办法
- JavaScript中全局变量、函数内变量以及常量表达式的效率测试