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>
原文地址:https://www.cnblogs.com/chengyunshen/p/7191729.html