JavaScript设计模式-1.函数
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>javascript高级语法1-函数</title> 6 </head> 7 <body> 8 <script> 9 function print(p){ 10 console.log(p.toString(),p) 11 } 12 /* 13 var arr= new Array(); 14 arr.push(1); 15 arr.push(2); 16 arr.push(3); 17 arr.push(4); 18 print(arr); 19 print(arr.join(":")) 20 var arr2 = [5,6,7,8] 21 print(arr.concat(arr2)) 22 //each() 扩展函数的方法 23 Array.each = function(array,fn){ 24 for(var i=0;i<array.length;i++){ 25 fn(array[i]); 26 } 27 } 28 Array.each(arr,function(v){ 29 print(v); 30 }) 31 32 //回调函数定义 33 function add(x,y,fn){ 34 this.x=x||1; 35 this.y=y||1; 36 if(fn){ 37 fn(this.x + this.y); 38 } 39 } 40 41 add(3,5,function(v){ 42 if(v>5){ 43 alert("res >5") 44 }else{ 45 alert(res <=5"") 46 } 47 }) 48 49 50 //函数传参 51 //1.参数传递随意性(可以少传或多传参数) 52 function add(x,y,z){ 53 this.x = x||0; 54 this.y = y||0; 55 this.z = z||0; 56 alert(this.x+this.y+this.z); 57 } 58 59 60 add(12,3,4,5); 61 //弊端:无法像java等高级语言那样有函数精确复写的特性。 62 //技巧:如果你这个类是工具类的情况下,那么接收的参数最好是对象。 63 //conf={gridName:"",gridCode:"",gridSize:""} 64 function gridUtil(conf){ 65 alert(conf["gridName"]+conf["gridSize"]); 66 } 67 gridUtil({gridName:"zhangsan",gridSize:"20"}) 68 69 //传值还是传地址 70 var i = 100; 71 var s = "one"; 72 function add3(i,s){ 73 i++; 74 s+="--" 75 } 76 add3(); 77 alert(i); 78 alert(s); //证明基础变量传递数值。 79 80 var o = {name:"zhangdan"}; 81 function change(o){ 82 o["name"] = "javascript"; 83 } 84 change(o); 85 alert(o.name); //证明自定义对象传参方式传的是地址。 86 87 88 //函数递归 89 function add4(start,end){ 90 var num= 0; 91 num += start; 92 if(start<end){ 93 num += add4(start+1,end); 94 } 95 return num 96 } 97 alert(add4(1,100)); 98 99 100 //代理函数--》 用程序来决定返回的新的函数(生产函数的函数) 101 //模拟数据库 102 var person = {"jim":'m',"lili":"w"} 103 var test = function(name){ 104 if(person[name]=="m"){ 105 return function(nk,wk){ 106 alert(nk+" "+wk); 107 } 108 }else if(person[name]=="w"){ 109 return function(nk,wk,fk){ 110 alert(nk+" "+wk+" "+fk); 111 } 112 } 113 } 114 test("jim")("ok","ok"); 115 test("lili")("ok","ok","no"); 116 //前端代码不常用,会使代码复杂化。架构常用。 117 118 */ 119 120 //eval()函数 --》把一个字符串解析成一个函数并执行 121 var str = "var show = function(){alert(100)}()"; 122 eval(str); 123 // 应用场景:数据库有时候会返回一个字符串(长得像js数组); 124 var a = "[1,2,3]"; 125 var arr = eval(a); 126 for(var i = 0;i<arr.length;i++){ 127 console.log(arr[i]); 128 } 129 130 131 </script> 132 </body> 133 </html>