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);
汤姆大叔6道javascript思考题
原文:http://www.cnblogs.com/songjum/p/5272279.html