JavaScript 高级程序设计训练,深入理解核心基础。

写在前面的话

如果你不 Baidu/Google,能答对 4 个及以上并且想拿高工资,那就可以联系汤姆大叔了。img

(说实话,我是不信的。)

6 个题目

  1. 找出数字数组中最大的元素(使用 Match.max 函数)
  2. 转化一个数字数组为 function 数组(每个 function 都弹出相应的数字)
  3. 给 object 数组进行排序(排序条件是每个元素对象的属性个数)
  4. 利用 JavaScript 打印出 Fibonacci 数(不使用全局变量)
  5. 实现如下语法的功能:var a = (5).plus(3).minus(6); //2
  6. 实现如下语法的功能:var a = add(2)(3)(4); //9

测试点分析

考点解析,慎入

  1. Math.max、apply 或 call 函数
  2. 作用域、闭包、函数表达式立即执行
  3. 排序比较函数、获取对象属性的个数
  4. 条件语句、函数调用自身
  5. 给原生对象添加方法
  6. 函数的定义及用法,参数作用域,以函数为值传递;

关尔先生的答案

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
//随机一个【10到20】的数组
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;
}

//完了,假如要前15个,结果如下:
var n = 15;
console.log('输出前' + n + '个斐波那契数列的数组');
console.log(Fibonacci(n));

console.log('-----------第5题-----------------');

//实现如下语法的功能:var a = (5).plus(3).minus(6);//2
//给原生Number对象添加方法
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题-------------------');

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

//程序如下:
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);