안녕하세요. 박기린 입니다.
이번엔 함수의 '인수'에 관련된 내용인 '기본값'과 'Reference type'에 대해 알아보겠습니다.
Default Parameters
ES6 부터는 함수의 인수 옆에 '= (할당연산자)'를 붙인 후, expression을 넣어주면 default value(기본값)으로 설정됩니다.
const bookings = [];
const createBooking = function(flightNum, numPassengers = 1, price = 199 * numPassengers) {
// ES5 방식
// numPassengers = numPassengers || 1;
// price = price || 199;
const booking = {
flightNum,
numPassengers,
price,
};
console.log(booking);
bookings.push(booking);
};
ES5까지의 버전에는 OR( || )연산자를 이용해서 함수의 기본값을 설정해줘야 했습니다.
하지만 ES6와 함께 현대적인 프로그램 방식이 도입되었습니다.
createBooking('LH123');
createBooking('LH123', 2, 800);
결과값입니다.
createBooking('LH123', undefined, 800);
만약 처음과 끝이 아닌 중간에 선언된 인수인 경우, Undefined로 넘어가서 기본값이 불러와지게 끔 하면 됩니다.
Reference Type Arguments
함수에 인수를 전달할 때 전달한 인수의 데이터 타입이 Reference type (Object, Array, Function) 이라면, 함수 내에서 변경된 사항이 전역에서도 적용됩니다.
const checkIn = function(flightNum, passenger) {
flightNum = 'LH999'; // primitve type이므로 단순 복사가 일어남
passenger.name = 'Mr. ' + passenger.name; // object이므로 reference type이기에 참조 주소로 이어짐.
if(passenger.passport === 1243242351) {
alert('Checked In');
} else {
alert('Wrong Passport');
}
}
checkIn 함수가 있습니다.
1. flightNum은 비행기 번호를 String Type으로 받습니다. - Primitive Type
2. passenger는 탑승객의 정보를 Object Type으로 받습니다. - Reference Type
flightNum은 'LH999'
passenger는 name property에 'Mr. ' String을 덧붙이는 작업이 있습니다.
const flight = 'LH234';
const giraffe = {
name: 'park giraffe',
passport: 1243242351,
}
이제 위와 같은 변수를 만들어 준 다음에,
checkIn(flight, giraffe);
console.log(flight); // LH234 <- primitive type
console.log(giraffe); // Mr. park yosep <- reference type
checkIn 함수에 인수로 전달한 후, 콘솔을 확인해줍니다.
결과값입니다.
flight는 checkIn 함수를 거쳤음에도 원본과 똑같지만, giraffe의 name property는 checkIn 함수를 거친 후 변화된 value가 그대로 이어지고 있음을 확인할 수 있습니다.
코드 전문
const bookings = [];
const createBooking = function(flightNum, numPassengers = 1, price = 199 * numPassengers) {
// ES5 방식
// numPassengers = numPassengers || 1;
// price = price || 199;
const booking = {
flightNum,
numPassengers,
price,
};
console.log(booking);
bookings.push(booking);
};
createBooking('LH123');
createBooking('LH123', 2, 800);
createBooking('LH123', undefined, 800);
const flight = 'LH234';
const giraffe = {
name: 'park giraffe',
passport: 1243242351,
}
const checkIn = function(flightNum, passenger) {
flightNum = 'LH999'; // primitve type이므로 단순 복사가 일어남
passenger.name = 'Mr. ' + passenger.name; // object이므로 reference type이기에 참조 주소로 이어짐.
if(passenger.passport === 1243242351) {
alert('Checked In');
} else {
alert('Wrong Passport');
}
}
checkIn(flight, giraffe);
console.log(flight); // LH234 <- primitive type
console.log(giraffe); // Mr. park yosep <- reference type
'JS > JavaScript 강의' 카테고리의 다른 글
45. Call and Apply Methods (0) | 2022.11.29 |
---|---|
44. Callback Functions (일급함수, 고차함수) (0) | 2022.11.28 |
42-2. String 내장 메소드를 응용해보기 (0) | 2022.11.23 |
42. String 내장 메소드를 응용해보기 (0) | 2022.11.22 |
41. Looping Objects: Object Keys, Values, and Entries (0) | 2022.11.19 |