• 汤姆大叔6道javascript思考题


    1、返回数组中的最大值;(math.max)
     
    首先,明确用法。math.max(1,2,4,-5,3 )  比较传入参数的值,参数个数任意;
    实现 : 用apply(object,[]);
    var num =[1,2,3,4,5];
    var b=Math.max.apply(Math,num);
    2、转化一个数字数组为function数组(每个function都弹出相应的数字)

         function toFunction (num){
              var mynum= new Array();
              for(var i=0,len=num.length;i<len;i++)
              {
                   var myfunction=(function(n){
                        return function(){
                                 alert(n);
                            }
                   })(num[i]); //自执行函数,通过循环将num中的每个值做为参数传给函数,每次都返回一个alert该参数的函数。因为使用了闭包(自由变量,不是在本身作用域定义的变量),通过n存储每个num【i】的值,以实现函数功能;
                   mynum.push(myfunction);
              }
              return mynum;
         }
         var num=[1,2,3,4,5];
              var newnum=toFunction(num);
              newnum[4]();
    // 3、给object数组进行排序(排序条件是每个元素对象的属性个数)  num[{a:1,b:2},{},{a:3}]   
    num.sort()     arrayobj.sort(sortfunction)  
    参数 
    arrayObj  
    必选项。任意 Array 对象。  
    sortFunction  
    可选项。是用来确定元素顺序的函数的名称。如果这个参数被省略, 
    那么元素将按照 ASCII 字符顺序进行升序排列。  
    说明 
    sort 方法将 Array 对象进行适当的排序; 
    在执行过程中并不会创建新的 Array 对象。 

    如果为 sortfunction 参数提供了一个函数,那么该函数必须返回下列值之一:  

    负值,如果所传递的第一个参数比第二个参数小。  
    零,如果两个参数相等。  
    正值,如果第一个参数比第二个参数大。  
    //for(var i in object|[])  在对象上迭代时是无序的,i就相当于其中某一个属性的引用;数组上按元素顺序
         function sortfun(obj1,obj2){
                  
                   var fn=function (obj){
                        var size=0;//size必须定义在函数内部,若定义在函数外部,则每次调用该函数时,所得到的return的size都是相等的,并不能达到判断个数并交换的效果;
                        for(var i in obj)
                        {
                             if(obj.hasOwnProperty(i))
                                  size++;
                        }
                        return size;
                   }
                   return fn(obj1)-fn(obj2);
         }
         var objnum=[
         {a:1,b:3,c:4},
          {a:1,b:3,c:4,d:5,f:6},
         {a:1,b:3,c:4,d:5} 
         ]
         objnum.sort(sortfun);         
    // 利用JavaScript打印出Fibonacci数(不使用全局变量)
    function fibNum(num){
         var fibArr=new Array();
         if(num<2){
              for(var i=0;i<num;i++)
              {
                   fibArr.push(i)
              }
         }
              else{
                   fibArr.push(0,1);
                   for(var i=2;i<num;i++)
                   {
                        var fibn=fibArr[i-1]+fibArr[i-2];
                        fibArr.push(fibn);
                   }
              }
              return fibArr;
    }

    // 实现如下语法的功能:var a = (5).plus(3).minus(6);
    Number.prototype.plus = function(i){   //为其原型添加方法plus 和 minus
        return this + i;
    }
    Number.prototype.minus = function(i){
        return this - i;
    }

    var a = (5).plus(3).minus(6);
    console.log(a);
    // 实现如下语法的功能:var a = add(2)(3)(4);
       function add(n1){
          return function(n2){
                 n2=n2+n1;
                 return function(n3)
                 {
                      return n3+n2;
                 }
          }

       }// 题目理解不够全面,并不只是单纯的3次参数传入,而是多个的情况下都能调试成功
       //实现分析 :递归调用 function(){ a+b}
       function myadd(l){
               var myl=l;
               var inadd= function (m){
                    myl += m;
                    return inadd;
               }//  当最后一个参数传入后,执行完毕得到需要的值myl,但是函数返回的是inadd这个
               inadd.toString=inadd.valueOf =function(){   //当返回的是函数或者对象时,浏览器会进行toString or valueOf 的转换,我们将该内部函数这两个自动转换机制的function进行重写,使其返回最后相加的值;
                   return myl;
               }
               return inadd;
       }

    var a = add(2)(3)(4);
    console.log(a);
  • 相关阅读:
    ps太卡
    vba 数字变为excel对应列的字母
    爬去网页离线数据
    vba 得到数字
    Sql Server generate table structure document
    Git
    windows凭据管理器
    修改注册表
    Software List
    1009 说反话
  • 原文地址:https://www.cnblogs.com/songjum/p/5272279.html
Copyright © 2020-2023  润新知