js面试题及答案(一)不喜,可放肆喷

1.找出数字数组中最大的元素(使用Match.max函数)
Math.max.apply(null, [1,2,3]);

2.转化一个数字数组为function数组(每个function都弹出相应的数字)
function transition(numArray) {
  var num;
  for (var i = 0, len = numArray.length; i < len; ++i) {
    num = numArray[i];
    numArray[i] = (function (j) {
      return function() {alert(j);}
    }(num));
  }
}

3.给object数组进行排序(排序条件是每个元素对象的属性个数)


4. 实现如下语法的功能:var a = (5).plus(3).minus(6); //2
Number.prototype.plus=function(a){
    return this+a;
    }
Number.prototype.minus=function(a){
    return this-a;
    }
var a = 5;
b=a.plus(3).minus(6);
console.log(b);

5. 实现如下语法的功能:var a = add(2)(3)(4); //9

function add(a) {
  return function(b) {
     a += b;
     return function(c) {
       return a +=c;
     }
  }
}

6.利用JavaScript打印出Fibonacci数(不使用全局变量)
ps:Fibonacci数 1 1 2 3 5 8
代码一:
function fib(num){
    if(num==1 || num==2){
        return 1;
        }
        return arguments.callee(num-1) + arguments.callee(num-2);
    }

代码二:
var fib = (function() {
  var array = [];
 
  return function(n) {
   if (array[n]) return array[n];
    
    if (n < 1) {
      array[n] = 0;
    } else if (n == 1 || n == 2) {
      array[n] = 1;
    } else {
      array[n] = fib(n-1) + fib(n-2);
    }
    
    return array[n];
  }
})();

代码三:
var fib = function(n) {
   if (fib[n]) return fib[n];
    
    if (n < 1) {
      return 0;
    } else if (n == 1 || n == 2) {
      fib[n] = 1;
    } else {
      fib[n] = fib(n-1) + fib(n-2);
    }
    
    return fib[n];
};
代码二,代码三性能较高,内部缓存了一个斐波那契数列的数组,如果之前计算过某个数,就直接返回,不用重新计算了




郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。