一、什么是函数的自调用
可以理解为函数自己调用自己,也就是在函数内部放入调用这个函数的代码。在函数运行时执行调用代码,可以一直循环调用这个函数。
例如:
var a=100
function fn () {
console.log(666)
fn()
}
fn()
这会无限循环打印666,会导致电脑卡死。
解决方法添加条件判断语句
例如:
let i=10 //注意这里I不能放在函数里面,函数每次调用都会重新执行内部代码
//放在里面就会每调用都重新声明了i,解决方法:通过传参方式
function fn () {
if(!i){
return i ;
}
else{
console.log(666)
i--;
fn()
}
}
fn()
二、函数自调用的案例
通过函数自调用输出10的阶乘
function fn (n) {
if(n<=1){
return 1
}
else{
return n*fn(n-1)
}
}
var re=fn(10)
console.log(re)
假设你只知道数组内部全是(数字和数组的混套),不知道嵌套了几层,打印出所有数字
var arr=[[1,2,3,4,[2,3,4,5],[2,3,4,5],[4,54,2,6]],[2,3,4,4,5,6]]
let myArr=function(arr){
for(let i=0;i<arr.length;i++){
if(typeof(arr[i])=='number'){
console.log(arr[i])
}else{
myArr(arr[i])
}
}
}
myArr(arr);
补充知识点:arguments
function fn (a,b) {
//实参==>调用时传入的数据(两种写法 数据直接量 变量)
// arguments.length 实参数量
// arguments.callee 运行的函数对象
}
fn(10,20)
对象中的函数的自调用方法
var obj={say:function(){
obj.say()
}}
自调用函数的自调用
(function(n){
if(n<=1){console.log(1)}
else{console.log(n);arguments.callee(n-1) }
})(10) //打印10,9,8,7,6,5,4,3,2,1