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 }
策略模式
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 ) );
代理模式 缓存代理
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”