3-3. 함수기초
함수란?
- 함수란 어떠한 로직을 코드 블록으로 감싸서 하나의 이름이 있는 실행단위로 만든 것
함수의 호출
- 함수는 정의한 자체로는 사용불가
-> 꼭 호출을 통해 기능을 동작 시켜야함!
함수를 사용하는 이유
- 함수는 미리 코드를 모아 놓고 필요할 때마다 여러 번 호출가능
-> 즉, 코드 실행 시점을 개발자가 결정할 수 있고 여러 번 재 사용이 가능
- 함수에 이름을 붙임으로써 함수의 역할을 잘 설명할 수도 있다.
-> 따라서 코드의 모듈화로 인해 유지 보수에도 도움이 되며 재 사용성이 높아진다는 측면에서 유용
매개 변수 (parameter)
- 매개변수란 함수 실행을 위해 필요한 데이터를 함수 내부로 전달할 목적으로 사용하는 변수
- 꼭 필요한 것은 아님
인수 (argument)
- 인수란 함수 외부에서 함수를 호출할 때 함수가 실행하기 위해 필요한 값을 함수 내부의 매개변수에게 전달하는 값
반환문 (return)
- 반환문은 return키워드와 반환값으로 이뤄진 반환문을 사용해 실행 결과를 함수 외부로 전달
return은 함수의 탈출문!
- 함수는 return을 만나는 순간 즉시 종료
-> return;
만 작성해서 break처럼 강제종료 가능
- return이 없는 함수는 변수에 저장하지 말고, 다른 함수의 매개값으로도 쓰면 안됨! (아무데도 사용하지않고 혼자만 동작)
function add(n1, n2) {
console.log(`n1: ${n1}, n2: ${n2}`);
return n1 + n2;
}
function multi(n1, n2) {
console.log(`${n1} x ${n2} = ${n1*n2}`);
}
console.log('======================');
var result = add(10, 20) * add(add(1, 4), add(1,1));
console.log(`result: ${result}`);
var r1 = multi(3, 4);
console.log(`r1: ${r1}`);
multi(2, 9);
multi(add(2,3), add(5,6));
var r2 = add(multi(2,4), multi(3,2));
console.log(`r2: ${r2}`);
function callName(nickName) {
var prohibits = ['바보', '멍청이', '메롱'];
if (prohibits.includes(nickName)) {
console.log('나쁜말 쓰지 마세요!!!');
return;
}
console.log(`${nickName}님 안녕하세요!!`);
}
console.log('==========================');
callName("뽀로로");
return vs break
- return은 모든 것을 종료시킴, break보다 강력함
- break는 break가 있는 반복문만 종료시킴
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body>
<script>
function stopLoop() {
while (true) {
var prom = prompt("명령어를 입력하세요!");
if (prom === "멈춰") {
break;
}
if (prom === "stop") {
return;
}
alert(prom);
}
alert("수고수고~~~");
}
stopLoop();
</script>
</body>
</html>
멈춰
를 입력하게되면 break가 동작하게되고 반복문만 종료되어 수고수고~~~
라고 메세지 출력
stop
을 입력하게되면 return이 동작하게되고 모든 것을 종료시키게되어 아무것도 출력되지않음
퀴즈1
function calcDivisor(n) {
var count = 0;
for(var i = 0; i < n+1; i++) {
if(n % i == 0) {
count++;
}
}
return count;
}
var divCount = calcDivisor(20);
console.log(`약수의 개수: ${divCount}개`);
소수점 반올림 Math.round()
- Math.round()만 사용하면 반올림되어 정수로 출력
- 소수점 둘째자리까지 하고싶다면?
-> Math.round(내가 구한 수 * 100) / 100
을 하면된다.
5.78786455435
x 100 => 578.7864...
반올림 => 579
/ 100 => 5.79
- 만약에 셋째짜리 하고싶다면
x1000, /1000
을 하면된다 !
퀴즈2
function calcBMI(h, w) {
var myBmi = Math.round(w / (h / 100 * h / 100) * 100) / 100;
if(myBmi >= 25.0) {
console.log("당신은 과체중입니다.");
console.log(myBmi);
return myBmi;
} else if (myBmi <= 18.5) {
console.log("당신은 저체중입니다.");
console.log(myBmi);
return myBmi;
} else {
console.log("당신은 정상체중입니다.");
console.log(myBmi);
return myBmi;
}
}
var myBmi = calcBMI(179.5, 77);
function judgeWeight(bmi) {
var level;
if (bmi >= 25.0) {
level = '과';
} else if (bmi <= 18.5) {
level = '저';
} else {
level = '정상';
}
console.log(`당신은 ${level}체중입니다.`);
}
function calcBMI(cm, kg) {
var m = cm / 100;
var bmi = kg / (m * m);
judgeWeight(bmi);
return bmi;
}
function round(number, position) {
return Math.round(number * position) / position;
}
var h = 178.4, w = 78.2;
var myBmi = calcBMI(h, w);
console.log(`키 -> ${h}cm, 체중 -> ${w}kg의 체질량지수는 ${round(myBmi, 3)}입니다.`);
퀴즈3
function min2(x, y) {
return x > y ? y : x;
}
var result1 = min2(134, 56);
console.log(`result1: ${result1}`);
function min3(x, y, z) {
var min = x;
if (min > y) {
min = y;
}
if (min > z) {
min = z;
}
return min;
}
var result2 = min3(120, 50, 99);
console.log(`result2: ${result2}`);
function isEven(n) {
return n % 2 === 0;
}
var result3 = isEven(10);
console.log(`result3: ${result3}`);