编写高质量代码(5)

来源:互联网 发布:行知社会实践园游后感 编辑:程序博客网 时间:2024/05/12 00:54

这篇笔记正式进入javascript,先总结下,看了这本书对javascript的理解,感觉我对javascript的理解更上了一层楼,不止是技术上,更多的在技巧上,我发现我对javascript的封装理解还是有一些问题,在这方面这本书教了很多,所以强烈推荐读到我文章的人,可以自己看一下这本书《编写高质量代码-Web前端开发修炼之道》,并不是搞推销,这也是我博客里至今唯一推荐的一本书,真的好看

如果是一个团队一起编写javascript,最容易出现的问题大家肯定知道,便是全局变量容易造成问题,每个人写自己的全局变量导致全局变量造成程序错误,如何避免的,使用匿名函数,更准确的说是私有作用域

(function(){    //这里就是私有作用域})()

用这种方法让变量的作用域控制在匿名函数中,轻松全局变量的问题,但是这种方法也阻隔了函数之间的通信,怎么解决呢,这样我们还是需要全局变量来通信,但这样违背了我们使用私有作用域的初衷,如何做呢?用hash对象作为全局变量

var Global={} //设置一个对象

这样我们如果某个匿名函数需要一个全局变量我们只需要写成

Global.str//这样我们就定义了一个全局变量str

但仅仅这样还是存在一些小问题,什么呢,这样不能保证一对一的通信,不影响其他函数,比如我们有3个函数,其中都有str,而我只想其中两个通信,正好概面了str的值,这样另一个函数也受到了影响,这种错误如何避免呢,我们可以在上面的代码上再加上自己独特的标签,例如

Global.A={}//在私有作用域在创建一个对象Global.A.str//这样我们就不会出现上面的错误了

不过如果同一个函数非常复杂,我们可能需要很多命名空间,怎么办呢,这时候我们就需要封装命名空间函数了

var Global={};    Global.namespace=function(str){        var arr=str.split(".");        var o=Global;        for(i=(arr[0]=="Global")?1:0;i<arr.length;i++){//这本书这里写错了,害得我好苦,我改了过来            o[arr[i]]=o[arr[i]]||{};            o=o[arr[i]];        }    }       //调用    Global.namespace("A.CAT.D");    Global.A.str="wangyue";    a=Global.A.str;
0 0
原创粉丝点击