标签:
原文参考,http://www.cnblogs.com/TomXu/archive/2012/02/10/2342098.html
Tom大叔的博客深入理解Javascript系列真是我们学习Javascript的领航明灯, http://www.cnblogs.com/TomXu/archive/2011/12/15/2288411.html
有兴趣的朋友自己去学习下吧. 一下是对他出的6到题的解答.
第一题:找出数字数组中最大的元素(使用Match.max函数)
原本的我答案是这样
function getMax(array) {
var max= array[0];
array.forEach(function(element){
max<element?max=element:max;
});
return max;
}
var arr = [12, 5, 8, 130, 44,99,888];
console.log(getMax(arr)); //888
看到提示,查了Match.max文档 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Math/max
发现其实只要这样就可以了.
var arr = [12, 5, 8, 130, 44,99,888];
console.log(Math.max.apply(null, arr));
其实这题是考的apply的用法和平时多api文档是否熟悉.要熟悉应该是非常简单旳.
第二题:转化一个数字数组为function数组(每个function都弹出相应的数字)
function NumberToFunction(arr){ var funarr = []; arr.forEach(convert); function convert(element,index,array){ function log(element){ return function(){console.log(element);}; } funarr.push(log(element)); } return funarr; } var arr = [12, 5, 8, 130, 44,99,888]; var funa = NumberToFunction(arr); //验证结果 funa.forEach(function(elment){ elment.call(); });
这道题我理解是考closures的概念,就是闭包. 有两点要注意
1. 循环中不能使用闭包 所以创建了function convert.
2. push里如果要接受convert的参数element不能使用闭包. 所有又添加了function log. 否则虽然可以创建function数组,但是数组里打印不出结果.
第三题: 给object数组进行排序(排序条件是每个元素对象的属性个数)
var persons = [ { name: ‘Jason‘, age: 20, gender:‘male‘ }, { name: ‘Tom‘, age: 18 }, { name: ‘May‘, age: 18, gender: ‘female‘, high: ‘165cm‘ } ]; persons.sort(function(a,b){ if(Object.getOwnPropertyNames(a).length >Object.getOwnPropertyNames(b).length){ return 1; } if(Object.getOwnPropertyNames(a).length<Object.getOwnPropertyNames(b).length){ return -1; } return 0; }); console.log(persons);
Object.keys().length也可以.考api常识 Array.sort,Object.getOwnPropertyNames()或Object.keys()
第四题: 利用JavaScript打印出Fibonacci数(不使用全局变量)
function PFibonacci(){ var arrFib = [0,1]; var count = arguments[0]?arguments[0]:10; return { print:function(){ console.log(arrFib[0]); console.log(arrFib[1]); for(var i = 2; i< count;i++){ arrFib[i] = arrFib[i-1] + arrFib[i-2]; console.log(arrFib[i] ); } } } } PFibonacci(20).print();
第五题:实现如下语法的功能:var a = (5).plus(3).minus(6);
Number.prototype.plus= function(x){ return this + x; }; Number.prototype.minus = function(x){ console.log(this); return this - x; };
console.log((5).plus(3).minus(6)); //2
考prototype的用法.
第六题:实现如下语法的功能:var a = add(2)(3)(4); //9
var add = function (){ var x = arguments[0]; return function(){ x += arguments[0]; return function(){ return x += arguments[0]; } }; };
console.log(add(2)(3)(4));//9
这题很纠结,想写出一个add()()()(...),无限下去的方法失败. 只能固定3重连加了.
标签:
原文地址:http://www.cnblogs.com/dangkei/p/4977022.html