javascript设计模式与开发实践 阅读总结

4月已经过去,5月已经来临,春招的尾巴抓不住,只能先去一家公司实习,但是其实很庆幸的是,碰到了很nice的团队,虽然刚开始去那边只是熟悉环境和水一水,但是我还是兢兢业业地看之前的项目,当然闲暇之余还是要多看书啦,毕竟春招过了还有秋招啊,人还是要多多努力的啊!!!!

概念:

闭包:其实就是改变变量的生命周期,js的回收机制一般是垃圾回收(当然bom和dom有点不同),当调用函数过后,局部变量没有被销毁,反而依然被引用着,那么这就是闭包。

高阶函数:只要满足下面任意一个条件就是高阶函数

1、函数可以作为参数被传递;

2、函数可以作为返回值被输出。

单例模式

 1 //单例模式
 2 var getSingle = function(fn){
 3 
 4     var result;
 5     return function(){
 6         return result || ( result = fn.apply(this,arguments) );
 7     }
 8 
 9 };
10 
11 
12 //创建节点
13 var createLoginLayer = function(){
14 
15     var div = document.createElement('div');
16     div.innerHTML = '我是登录浮窗';
17     div.style.display = 'none';
18     document.body,appendChild(div);
19     return div;
20 
21 };
22 
23 
24 var createSingleLoginLayer = getSingle(createLoginLayer);
25 document.getElementVById('loginBtn').onclick = function(){
26     var loginLayer = createSingleLayer();
27     loginLayer.style.display = 'block';
28 }
View Code

 策略模式

 1 var strategies = {
 2     "S": function( salary ) {
 3         return salary * 4 ;
 4     },
 5     "A": function( salary ) {
 6         return salary * 3 ;
 7     },
 8     "B": function( salary ) {
 9         return salary * 2 ;
10     }
11 }
12 var caculateBonus = function ( level, salary ) {
13     return strategies[ level ]( salary );
14 }
15 console.log( caculateBonus( 'S',2000 ) );
View Code

代理模式  缓存代理

 1 //计算乘积函数
 2 var mult = function(){
 3     console.log( '开始计算乘积' );
 4     var a = 1;
 5     for ( var i = 0, l = arguments.length; i < l; i++ ){
 6         a = a * arguments[i];
 7     }
 8     return a;
 9 };
10 
11 mult( 2, 3 );    // 输出:6
12 mult( 2, 3, 4 );    // 输出:24
13 
14 //代理
15 var proxyMult = (function(){
16     var cache = {};
17     return function(){
18         var args = Array.prototype.join.call( arguments, ',' );
19         if ( args in cache ){
20             return cache[ args ];
21         }
22         return cache[ args ] = mult.apply( this, arguments );
23     }
24 })();
25 
26  proxyMult( 1, 2, 3, 4 );    // 输出:24
27  proxyMult( 1, 2, 3, 4 );    // 输出:24”
View Code

 

posted @ 2018-04-29 12:40  紫陀螺Echo  阅读(268)  评论(0编辑  收藏  举报