JavaScript

자바스크립트 함수(Arrow 함수, 재귀함수)

걷는 청년 2024. 7. 24. 11:58

자바의 람다식같은 함수가 자바 스크립트에도 존재하는데, 이를 화살(Arrow)함수 라고 한다.

이에 대해 정리해보았다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
const sum1 = function(a, b){
	return a + b;
}
console.log(`두 수의 합은 ${sum1(3, 4)}`);

const sum2 = (a, b) => a + b;
console.log(`두 수의 합은 ${sum2(4,5)}`);

//let double1 = (n) => n * 2;
let double1 = n => n * 2;
console.log(double1(3));

let sayHi = () => '안녕하세요';
console.log(sayHi());

//let age = prompt('나이 입력', 22);
let age = 33;
let welcome = (age < 30)?() => "안녕":() =>"반가워";
console.log(welcome());

console.log('----------------------');
//console.clear();

let sunFunc = (a, b) => {
	let result = a + b;
	return result;
}

console.log(`sunFunc 결과 : ${sunFunc(3, 4)}`);

console.log('----------------------');
// 반복문 처리 : for
function func(...para){
	console.log(para.length, ' ', para);
	
	for(let i=0; i<para.length; i++){
		console.log(para[i]);
	}
	
	for(let s of para){	// 배열은 of 객체는 in
		console.log(s);
	}
	
	// Array.forEach(callbackFn [,arg])
	para.forEach(function(obj){	// 콜백함수 obj
		console.log(obj);
	});
	
	(para.forEach((obj) => console.log(obj)));
}

func('a', 'b', 'c', 'd');

console.log('---------------------');
// setInterval : 웹페이지의 특정 부분을 주기적으로 업데이트해줘야 하거나 어떤 API로 부터 변경된 데이터를 주기적으로 받아와야 하는 경우 사용한다
//setInterval(() => console.log(new Date()), 1000);	// setInterval(수행함수, 시간)

// setTimeout : 어떤 코드를 바로 실행하지 않고 일정 시간 기다린 후 실행해야하는 경우 사용한다
//setTimeout(() => console.log("2초 후에 실행됨"), 2000);	// setTimeout(수행함수, 시간)

console.log('처리 1');
//setTimeout(() => console.log('처리 2'), 3000);
setTimeout(function(){
	console.log('처리 2');
}, 3000);
console.log('처리 3');

// argument로 화살표 함수 사용
function abcFunc(su, f1, f2){
	if(su % 2 === 0) f1(); else f2();
}

abcFunc(2, () => console.log('짝수'), () => console.log('홀수'));


function showOk(){
	console.log('네 동의합니다');
}

function showCancel(){
	console.log('아니오');
}

function ask(question, yes, no){
	if(confirm(question)){
		yes();
	}else no();	
};

ask("동의합니까?", showOk, showCancel);

</script>

</head>
<body>
<h2>화살표 함수</h2>
화살표 함수(arrow function)를 사용하면 함수 표현식보다 단순하고 간결한 문법으로 함수를 만들 수 있다.
<br>
<h2>콜백 함수</h2>
프로그래밍에서 콜백(callback) 또는 콜백 함수(callback function)는 다른 코드의 인수로서 넘겨주는 실행 가능한 코드를 말한다.
콜백을 넘겨받는 코드는 이 콜백을 필요에 따라 즉시 실행할 수도 있고 나중에 실행할 수도 있다.


</body>
</html>

 

 

그리고 이 다음으로는 재귀함수 라는 것도 배웠는데, 재귀함수란 함수 자신을 자기 자신이 다시 호출하는 구조로 만들어진 함수를 뜻한다.

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>재귀함수</h2>
함수가 자신을 다시 호출하는 구조로 만들어진 함수. 재귀함수는 종료조건이 있어야 하며 종료조건을 설정해주지 않으면 무한 반복을 하게된다.
재귀함수로 작성이 되는 코드는 반복문으로도 작성할 수 있다.
<hr>
<script type="text/javascript">
console.log('거듭제곱용 내장함수 : ', Math.pow(2, 3));

// 거듭제곱 함수 직접 작성 : for loop
function powFunc1(x, n){
	let result = 1;
	for(let i=0; i<n; i++){
		result *= x;
	}
	return result;
}

console.log('거듭제곱용 사용자 정의 함수 : ', powFunc1(2, 3));

// 거듭제곱 함수 직접 작성 : 재귀 함수(반복 횟수가 많지 않아야 좋음)
function powFunc2(x, n){
	if(n === 1) return x;
	else return x * powFunc2(x, n-1); // 자신을 호출
}

console.log('거듭제곱용 재귀 함수 : ', powFunc2(2, 3));

// 삼항 연산자에 재귀함수
function powFunc3(x, n){
	return (n === 1)?x : x * powFunc3(x, n-1);
}

console.log('거듭제곱용 삼항연산자 재귀함수 : ', powFunc3(2, 3));

//삼항 연산자에 재귀함수
const powFunc4 = (x, n) => (n === 1)?x : x * powFunc4(x, n-1);

console.log('거듭제곱용 화살표 재귀함수 : ', powFunc4(2, 3));

</script>

</body>
</html>