发表于: 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)
- 全局变量
一般情况下,我们会使用全局变量来保存该数字状态。 var a = 0;
function add(){
return ++a;
}
console.log(add());//1
console.log(add());//2
- 自定义属性
但上面的方法中,变量a实际上只和add函数相关,却声明为全局变量,不太合适。
将变量a更改为函数的自定义属性更为恰当。 function add(){
return ++add.count;
}
add.count = 0;
console.log(add());//1
console.log(add());//2
- IIFE
其实这样做,还是有问题。有些代码可能会无意中将add.count重置。
使用IIFE把计数器变量保存为私有变量更安全,同时也可以减少对全局空间的污染。 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()时会报错
评论