[Javascript] 함수(내부함수, 재귀호출)

h220101·2022년 8월 2일
0

내부함수

  • 함수 내 함수.
  • 지역변수와 같이 지역함수이므로 외부에서 쓰일 수 없다.
<script type="text/javascript">
		var myFn = function(){
			var sumFn = function(){
				console.log('내부 익명 함수');
			}
			function sumFn2(){
				console.log('내부 일반 함수');
			}
			sumFn(); //내부함수실행
			sumFn2(); //내부함수실행
			console.log('함수 실행');
		}
		myFn();
		//sumFn(); 내부함수는 함수 밖에서 호출 불가능
		//sumFn2(); 내부함수는 함수 밖에서 호출 불가능
	</script>

재귀 호출

함수 내부에서 자신함수를 호출하는 것.

  • 외부에서 호출
  • 내부에서 나 자신 호출
	<script type="text/javascript">
		var callFn = function(n){ //매개변수 n 선언
			console.log('callFn');
			/*
				조건처리를 하여 재귀호출을 특정시점에 중단해야한다.
			*/
			if(n > 10){
				return 1;
			}
			callFn(++n); //자신함수를 호출, ++n 1개씩 
		}
		//callFn(); 무한루프
		var result = callFn(0);
		console.log(result);
	</script> 

리턴이 있는 재귀 호출

	<script type="text/javascript">
		function fnA(){
			return fnB();	
		}
		function fnB(){
			return fnC();					
		}
		function fnC(){
			return 10;
		}
		console.log(fnA()); //10
		
		function fnCall(n){ //10이 넘으면 멈추는 코드
			if(n > 10){
				return n;
			}else{
				return fnCall(++n);
			}
		}
		console.log(fnCall(0)); //11
	</script>

예제 (1)

arrSum 이라는 함수가 실행되면서 숫자가 담긴 배열을 인자로 받도록 되어있다.
이 함수의 기능은 배열의 숫자값을 합산하고 특정값이 도달했을때 함수를 종료시키고
그 결과값을 반환한다. 아래의 조건이 달성될수 있도록 함수코드를 작성하고
실행하여 그 결과값이 출력 될 수 있도록 하여라.
(배열의 요소값이 합산되면서 특정값 도달시 리턴)

<script type="text/javascript">
		var n = 50; //조건값 (전체 화면에서 공유하는 값이라는 가정)
		var arr = [5,10,15,20,25,30];
		function arrSum(arr){
			var sum = 0;
			for(var i=0; i<arr.length; i++){
				sum+=arr[i];
				if(sum>=n){
					return sum;
				}
			}
		}
		console.log(arrSum(arr));
</script>

예제 (2)

reFn 함수를 실행시 빈 배열객체를 인수로 삽입하여 실행 하였더니 , 최종 리턴값이
1~5까지의 배열 요소가 담긴 배열이 리턴 되었다. 위 조건대로 함수를 선언 하고 실행하여
최종 리턴값을 출력하여라.

<script type="text/javascript">
		function reFn(arr){
			if(arr.length == 5){
				return arr;
			}else{
				arr.push(arr.length+1);
				return reFn(arr);
			}
		}
		console.log(reFn([]))//[1,2,3,4,5]
</script>
	

<script type="text/javascript">
		function gugu(arr,n){
			if(arr.length == 9){
				return arr;
			}else{
				arr.push((arr.length+1)*n);
				return gugu(arr,n)
			}
		}
		console.log(gugu([],2));//[2,4,6,8.....]
		console.log(gugu([],5));//[5,10,15.....]
</script>

예제 (3)

ranArray 함수 실행시 숫자가 중복되지 않는 6개의 요소를 가진 배열이 리턴이 되었다.
위 조건대로 함수를 선언하고 실행하여 결과값을 출력하여라.

<script type="text/javascript">
	
		function ranArray(arr){
			var ran = Math.round(Math.random() * 44)+1;
			if(arr.length == 6){
				return arr;
			}else{
				for(var i=0; i < arr.length; i++){
					if(arr[i] == ran){
						return ranArray(arr);
					}
				}
				arr.push(ran);
				return ranArray(arr);
			}
				
		}
		console.log(ranArray([])); // 중복이 없는 숫자값 6개의 크기를 가진 배열
	
</script>
profile
기록하는 삶

0개의 댓글