湯姆大叔6道javascript思考題

一、返回數組中的最大值;(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);
二、轉化一個數字數組爲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]();
// 三、給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);
相關文章
相關標籤/搜索