JS函数自调用

顾名思义即函数内部自己调用自己;

举例:

<script>
			function fn () {
				console.log(666)
				// console.log(fn)//打印全局函数fn
				fn() //调用fn函数
			}			
			fn()//调用fn函数
            //没有终止条件,函数一直自调用,一直打印666,这样会造成无限循环,
</script>

我们在函数中加入判断条件,设置何时终止自调用:

<script>
    
			function  fn () {							
				if(){ //这里设置满足条件
					return 100
				}
				else{
						console.log(123)
					fn()
				}			
			}
			fn()
</script>

我们通过求阶乘的方法了解函数自调用,通过其思想逐步引入函数自调用的使用。

<script>
            function fn (n) {
			   	if(n<=1){ //设置函数自调用终止条件
					return 1
				}
				else{//n>1时重复执行该语句
					return n*fn(n-1)
				}
			}						
			var re=fn(10)//传入初始值10
			console.log(re)// 1*...*10	
            //每次调用过后的变化		
			//fn(10)==>10*fn(9)==>10*9*fn(8)==>10*9*8*fn(7)==>....10*9...2*fn(1)
</script>

加大难度:(需要寻找规律)

<script>
    //要求函数返回的结果是100+51+26.5+..a(不能小于2),设计函数体结构
    /*
    首先寻找其中规律每一项是前面一项除2+1 所以得出函数调用的传入值为(n*0.5+1)
    然后通过if else设置判断条件,因为a不能小于2,所以小于2时就结束自调用
    */
    function fn (n) {
		   	  if(n<2){
				  return 0
			  }
			  else{
				  n+fn(n*0.5+1)
			  }
		   }
		   var re=fn(100)

</script>

在业务逻辑中的运用:

假设你只知道数组内部全是(数字和数组的混套),不知道嵌套了几层,就需要用到函数自调用才能解决

<script>a
    var arr=[[1,2,3,4,[2,3,4,5],[2,3,4,5],[4,54,2,6]],[2,3,4,4,5,6]]
		   //打印出所有数字		
     function fn(arr){
			   // 遍历数组
			   for(var i=0;i<arr.length;i++){
				   if(typeof(arr[i])=="number"){
					   console.log(arr[i])
				   }else{
                    /*
                    如果知道有其中有几层嵌套可以通过以下方式
					 for(var j=0;j< arr[i].length;j++){
						  if(typeof(arr[i][j])=="number") console.log(arr[i])
						  else{
					         arr[i][j].length  因为不知道嵌套了几层 也就不知道该写几次for循环
						  }
					  }
                    */
                    //有数组时,从新调用该函数打印其中数字
					  fn(arr[i])
				   }
			   }
		   }		   
		   fn(arr)
</script>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值