一些零碎的知识点

递归

下面是两个经典的递归函数,就是在函数的内部调用自身。
求n个数的和。如n=5,sum = 5+4+3+2+1 = 15。

//求和 
function sum(n){
    if(n === 1){
        return 1;
    }else{
        return n+sum(n-1);
    }
}
//阶乘 nul(5)= 120
var mul = function(n){
    if(n === 1){
        return 1;
    }else{
        return n*mul(n-1);
    }
}

二叉搜索树中的中序遍历,这个代码有点难以理解。

//二叉搜索树中的中序遍历
this.inOrderTraverse = function (callback) {
    inOrderTraverseNode(root,callback);
};
let inOrderTraverseNode = function (node, callback) {
    if(node !== null){
        inOrderTraverseNode(node.left,callback);
        callback(node.key);
        inOrderTraverseNode(node.right,callback);
    }
};

一些零碎的知识点

image.png

arguments

JavaScript函数的另一个独特之处在于你可以给函数传递任意数量的参数却不造成错误。那是因为函数参数实际上被保存在一个被称为arguments的类似数组的对象中。如同一个普通的JavaScript数组,arguments可以*增长来包含任意个数的值,这些值可通过数字索引来引用。arguments的length属性会告诉你目前有多少个值。
arguments对象自动存在于函数中。也就是说,函数的命名参数不过是为了方便,并不真的限制了该函数可接受参数的个数。
'''
function sum() {
var result = 0,
i = 0,
len = arguments.length;
while (i <len) {
result += arguments[i];
i++;
}
return result;
}
console.log(sum(1, 2)); // 3
console.log(sum(3, 4, 5, 6)); // 18
console.log(sum(50)); // 50
console.log(sum()); // 0
'''

sum()函数接受任意数量的参数并在while循环中遍历它们的值来求和。这就和对一个数组中的数字求和一样。由于result初始值为0,该函数就算没有参数也能正常工作。