发表于: 2017-06-09 23:32:40

1 1176


今天完成的事情:

今天继续学习了Angular代码规范,用有道笔记做笔记的时候还顺便学了个Markdown,一种轻便的标记语言,

写法有些类似html,不过更简单,更方便书写。研究了一下有微钱的路由部分,有微钱的代码从登录页开始就是路由控制的,$urlRouterProvider.otherwise()部分填的也是欢迎页面而不是登陆页面,这让我很疑惑。除此之外,复盘项目每次输入列表页的地址时都要进行对cookie的检测,有cookie,验证帐密后直接进列表页,无cookie则跳至登录页,这部分在哪实现的怎么实现的。后来在ptteng-util-0.0.1.js里的factory里找到了$state.go(login),看来登录页的跳转是放在服务里了,这块儿涉及到登陆验证,牵连的还比较广,以前把$http一股脑卸载controller里的写法该改改了。

明天计划的事情:

完成登录页js部分,写欢迎页的侧边栏、导航栏。

遇到的问题:

还是对这种规范的Angular写法感到陌生,需要慢慢熟悉,在不断的运用中逐渐掌握。

收获:

了解了IIFE的概念和用法

函数跟随一对圆括号()表示函数调用,但有时需要在定义函数之后,立即调用该函数。这种函数就叫做立即执行函数,全称为立即调用的函数表达式IIFE(Imdiately Invoked Function Expression)


用途

IIFE一般用于构造私有变量,避免全局空间污染

接下来用一个需求实现来更直观地说明IIFE的用途。假设有一个需求,每次调用函数,都返回加1的一个数字(数字初始值为0)

  1. 全局变量
    一般情况下,我们会使用全局变量来保存该数字状态。
  2. var a = 0;

    function add(){

        return ++a;

    }

    console.log(add());//1

    console.log(add());//2

  1. 自定义属性
    但上面的方法中,变量a实际上只和add函数相关,却声明为全局变量,不太合适。
    将变量a更改为函数的自定义属性更为恰当。
  2. function add(){

        return ++add.count;

    }

    add.count = 0;

    console.log(add());//1

    console.log(add());//2

  1. IIFE
    其实这样做,还是有问题。有些代码可能会无意中将add.count重置。
    使用IIFE把计数器变量保存为私有变量更安全,同时也可以减少对全局空间的污染。
  2. var add = (function(){

        var counter = 0;

        return function(){

            return ++counter; 

        }

    })();

    console.log(add())//1

    console.log(add())//2

注意事项

var a = function(){

    return 1;

}

(function(){

    console.log(a());//报错

})();

  • 函数有一个声明提升的过程,函数表达式其实分为先声明后赋值这两步。而,如果后面存在着立即执行函数IIFE,这个IIFE会快到函数表达式a执行完第一步骤函数声明之后IIFE就会立即执行,这此时a未被赋值,是undefined,所以执行a()时会报错



返回列表 返回列表
评论

    分享到