함수의 기본
// 함수 선언
function sum(num1, num2) {
console.log("sum() 호출!");
return num1 + num2;
}
// 함수 사용
const result = sum(10, 3);
console.log(result);
// 13
//sum() 호출!
함수와 메모리
// sum() 함수를 add라는 상수에 담음
const add = sum;
console.log(sum(10, 3));
// 13
//sum() 호출!
console.log(add(10, 3));
// 13
//sum() 호출!
함수 작성 팁
- 조건식이 있을 때 조건을 만족하지 않는 경우 함수 도입부분에서 함수를 미리 종료시키는 것이 좋음
function print(num) {
if (num <= 0) return; // return을 사용하여 함수 도입부분에서 함수를 미리 종료
console.log(num);
}
print(10); // 10
print(-5); // return으로 인해 함수를 도입 부분에서 종료시킴
매개변수와 기본값
- 매개변수의 기본값: undefined
- undefined와 연산: NaN
- arguments: 함수의 전달된 인수에 해당하는 Array 형태의 객체
function total(num1=0, num2=0) {
console.log(num1);
console.log(num2);
console.log("arguments:", arguments);
console.log("arguments:", arguments[1]);
return num1 + num2;
}
console.log("result:",total());
console.log("result:",total(10, 3));
콜백 함수
// 콜백 함수
const clac_add = (a, b) => a + b; // a + b의 결과를 리턴해주는 함수
const clac_multiply = (a, b) => a * b; // a * b의 결과를 리턴해주는 함수 선언
console.log(clac_add(10, 5)); // 15
console.log(clac_multiply(10, 5)); // 50
// 콜백함수를 이용하여 계산기 만들기
function calculater(num1, num2, action) {
if (num1 < 0 || num2 < 0) return; //num1이나 num2가 0보다 작을 경우, 함수를 미리 종료
const result = action(num1, num2); // 매개변수로 받은 콜백함수 사용
console.log(result); // 결과 출력
return result; // 결과 리턴
}
calculater(4,2, clac_add); // 6
calculater(4,2, clac_multiply); // 8
원시값과 객체값의 비교
- 원시값: 값에 의한 복사
- 객체값: 참조에 의한 복사(메모리 주소)
// 원시값
function display(num) {
num = 10;
console.log(num);
}
const value = 5;
display(value); // 10
console.log(value); // 5
// 참조값
function displayObj(obj) {
obj.age = 13;
console.log(obj);
}
const dog = {name:"루시", age: 14};
console.log(dog); // {name: '루시', age: 14}
displayObj(dog); // 메모리 주소를 참조하고 있으므로, 위의 원시값과는 다르게 age가 14->13으로 변경 {name: '루시', age: 13}
console.log(dog); // {name: '루시', age: 13}
객체 복사
- 위의 코드의 displayObj(obj) 함수에서 obj.age = 13;과 같이 객체의 프로퍼티 값을 직접 변경하는 것은 좋지 못함
- 객체의 함수내에서 프로퍼티 값을 변경하고 싶을때, ...을 이용하여 객체를 복사하여 수정된 값을 리턴하는 방법이 좋음
// ... 복사
function changeAge(obj) {
return {...obj, age:13}; // ...을 이용하여 객체를 복사해서 수정된 값을 리턴
}
const dog1 = {name:"루시", age: 14};
const dog2 = changeAge(dog1);
console.log(dog1); // 객체를 복사하여 리턴하였기 때문에, 매개변수에 넣은 객체의 프로퍼티 값은 변경되지 않음 {name: '루시', age: 14}
console.log(dog2); // 복사된 객체 {name: '루시', age: 13}
문제
- 특정 숫자를 입력하면 해당 숫자까지의 출력
- 예) 5를 입력하면 1,2,3, 4, 5를 출력
- 특정 숫자를 입력하면 해당 숫자의 제곱을 출력
- 예) 4를 입력하면 16이 출력
- 위 두개의 식을 함수로 만들고 두 함수의 기능을 모두 사용할 수 있는 iterate()를 만들어보자
// 제곱을 출력해주는 함수
const a = num => console.log(num*num);
// 입력받은 숫자까지의 출력을 해주는 함수
const b = function(num) {
for (let i = 1; i < num+1; i++) {
console.log(i);
}
}
// 두 함수 기능을 사용할 수 있는 함수
function iterate(num, action) {
if(num<0) return; // 입력 받은 값이 0보다 작으면 미리 종료
action(num); // 콜백함수를 이용
}
iterate(5, a); // 25
iterate(5, b);
/*
1
2
3
4
5
*/
'JavaScript' 카테고리의 다른 글
28. 클래스 심화 (0) | 2023.04.12 |
---|---|
27. 객체 활용법 (0) | 2023.04.11 |
25. 정규 표현식 (0) | 2023.04.10 |
24. 노드(node) (0) | 2023.04.10 |
23. 문서 객체 모델(Document Object Model)[DOM] (0) | 2023.04.09 |