JavaScript 高级程序设计训练,深入理解核心基础。
写在前面的话
如果你不 Baidu/Google,能答对 4 个及以上并且想拿高工资,那就可以联系汤姆大叔了。
(说实话,我是不信的。)
6 个题目
- 找出数字数组中最大的元素(使用 Match.max 函数)
- 转化一个数字数组为 function 数组(每个 function 都弹出相应的数字)
- 给 object 数组进行排序(排序条件是每个元素对象的属性个数)
- 利用 JavaScript 打印出 Fibonacci 数(不使用全局变量)
- 实现如下语法的功能:var a = (5).plus(3).minus(6); //2
- 实现如下语法的功能:var a = add(2)(3)(4); //9
测试点分析
考点解析,慎入
- Math.max、apply 或 call 函数
- 作用域、闭包、函数表达式立即执行
- 排序比较函数、获取对象属性的个数
- 条件语句、函数调用自身
- 给原生对象添加方法
- 函数的定义及用法,参数作用域,以函数为值传递;
关尔先生的答案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
| var array = []; for (var i = 0; i < 10; i++) { array.push(Math.floor(Math.random() * 11) + 10); } console.log(array);
console.log('-------第1题---------------------');
var maxNum = Math.max.apply(Math, array);
console.log('上面的数列最大值是:' + maxNum);
console.log('---------第2题-------------------');
var arrayFunction = []; for (a in array) { arrayFunction[a] = (function (x) { return function () { console.log(x); }; })(array[a]); }
for (o in arrayFunction) { console.log('第' + o + '个函数弹出值如下:'); arrayFunction[o](); }
console.log('---------第3题-------------------');
var arrayObject = [ { name: 'A', age: 1, job: 'AA', good: 'AAA' }, { name: 'A', age: 1, good: 'AAA' }, { name: 'A', age: 1, job: 'AA', good: 'AAA' }, { name: 'A' }, { name: 'A', job: 'AA', good: 'AAA' }, { job: 'AA', good: 'AAA' }, ];
arrayObject.sort(function (a, b) { var a = Object.getOwnPropertyNames(a).length; var b = Object.getOwnPropertyNames(b).length; return a - b; });
console.log('对象数组按属性个数的从小到大排列:'); for (o in arrayObject) { console.log(o + ':'); console.log(arrayObject[o]); }
console.log('-------------第4题---------------');
function Fibonacci(n) { var FibonacciArray = Array(); for (var i = 1; i <= n; i++) { FibonacciArray.push( (function (ii) { return ii < 3 ? 1 : arguments.callee(ii - 1) + arguments.callee(ii - 2); })(i), ); } return FibonacciArray; }
var n = 15; console.log('输出前' + n + '个斐波那契数列的数组'); console.log(Fibonacci(n));
console.log('-----------第5题-----------------');
Number.prototype.plus = function (a) { return Number(this) + a; }; Number.prototype.minus = function (a) { return Number(this) - a; };
var b = (5).plus(3).minus(6); console.log('(5).plus(3).minus(6)=' + b);
console.log('---------第6题-------------------');
function add(a) { return function (b) { return function (c) { return a + b + c; }; }; }
var a = add(2)(3)(4); console.log('add(2)(3)(4)=' + a);
|