对于下面的函数:
这是一个简单的自调用函数
通过一个简单的公式实现函数的自调用 输出从10到1互相相乘的结果
function fn(n){
if(n<=1){
return 1
}else{
return n*fn(n-1)//10*9*..fn(n-1)
}
}
var re=fn(10)//fn(10)=10*fn(9)=>fn(9)=9*fn(8)...2*fn(1)=2*1
console.log(re);//1*...10*/
由下面的代码可知:
要打印出这个嵌套数组的所有数字在不知道内容的情况下
先将数组进行遍历 当有非数字时便取这个非数字的数组自调用在遍历直到遍历完所有数组中的数字
var arr=[[1,2,3,4,[1,2,3,4],[1,2,3,4],[1,2,3,4]],[2,3,4,5,6]]
// 假设你只知道数组内部全是(数字和数组的混套)
// 打印出所有数字
function fn(arr){
// 遍历数组
for(var i=0;i<arr.length;i++){
if(typeof(arr[i])=="number"){
console.log(arr[i]);
}else{
fn(arr[i])//是数组就在调用函数 for循环
}
}
}
fn(arr)
对于没有函数名的情况如何自调用:
arguments.length 实参的长度
arguments.callee 正在运行的函数对象 下面是function这个函数
(function (n){
if(n<=1){
console.log(1);
}else{
console.log(n);
arguments.callee(n-1)//不知道函数名的情况
}
})(10)
//10 9 8 7 ...1