一个传统程序员是这么写的:1
2
3
4
5
6
7function length(array) {
var sum = 0
for(var i = 0; i < array.length; i++) {
sum++
}
return sum
}
一个读过SICP的程序员是这么写的:1
2
3
4
5
6
7function length(array) {
if(array.length === 0) {
return 0
} else {
return 1 + length(array.slice(1))
}
}
另一个读过SICP的程序员:1
2
3
4
5
6
7
8
9
10function length(array) {
function helper(array, num) {
if(array.length === 0) {
return num
} else {
return helper(array.slice(1), num + 1)
}
}
return helper(array, 0)
}
再函数式一点:1
2
3function length(array) {
return array.reduce(function(prev, cur) { return prev + 1 }, 0)
}
一个我面试过的人…1
2
3function length(array) {
return array.length
}