- 함수 내 함수.
- 지역변수와 같이 지역함수이므로 외부에서 쓰일 수 없다.
<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>
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>
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>
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>