编写高质量代码(5)

这篇笔记正式进入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;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小疯疯0413

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值