递归
下面是两个经典的递归函数,就是在函数的内部调用自身。
求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,该函数就算没有参数也能正常工作。
什么鬼东西呢
标签
JavaScript 语言允许,语句的前面有标签(label),相当于定位符,用于跳转到程序的任意位置,标签的格式如下
laber:
语句
标签可以是任意的标识符,但不能是保留字,语句部分可以是任意语句。
标签通常与 break 语句和 continue 语句配合使用,跳出特定的循环。
用途:
可以跳出循环。
对于多层循环也同样适用。
特别是两层或者多层循环,只是为了找到想要的某个值时,而循环的数据是大量的,用标签就非常高效。
网友评论