클린코드 자바스크립트 7-2 함수 다루기(default value, Rest Parameters, void & return, 화살표 함수)
Clean Code JS 강좌는 여러 절로 구성되어 있습니다.
- 클린코드 자바스크립트 1-1 변수 다루기(let & const 사용, function scope & block scope)
- 클린코드 자바스크립트 1-2 변수 다루기(전역 공간 사용 최소화,임시 변수 제거하기)
- 클린코드 자바스크립트 1-3 변수 다루기(호이스팅)
- 클린코드 자바스크립트 2-1 타입 다루기(타입 검사)
- 클린코드 자바스크립트 2-2 타입 다루기(undefined & null, eqeq 줄이기)
- 클린코드 자바스크립트 2-3 타입 다루기(형변환 주의하기, isNaN)
- 클린코드 자바스크립트 3-1 경계 다루기(min-max,begin-end,first-last,접두사와 접미사, 매개변수 순서가 경계)
- 클린코드 자바스크립트 4-1 분기 다루기(값식문, 삼항 연산자)
- 클린코드 자바스크립트 4-2 분기 다루기(truthy & falsy, 단락 회로 평가)
- 클린코드 자바스크립트 4-3 분기 다루기(else if & else 피하기, Early Return, Default case 고려하기)
- 클린코드 자바스크립트 4-4 분기 다루기(Default case 고려하기, Nullish coalescing operator, 드모르간 법칙)
- 클린코드 자바스크립트 5-1 배열 다루기(JS의 배열은 객체다, Array.length, 배열 요소에 접근하기)
- 클린코드 자바스크립트 5-2 배열 다루기(유사 배열 객체, 불변성, for문 배열 고차 함수로 리팩토링)
- 클린코드 자바스크립트 5-3 배열 다루기(배열 메소드 체이닝 활용, map vs forEach, continue&break)
- 클린코드 자바스크립트 6-1 객체 다루기(Object Destructuring, Object.freeze)
- 클린코드 자바스크립트 6-2 객체 다루기(Prototype 조작 지양하기, hasOwnProperty, 직접 접근 지양하기)
- 클린코드 자바스크립트 7-1 함수 다루기([함수,메서드,생성자], argument & parameter,복잡한 인자 관리하기)
- 클린코드 자바스크립트 7-2 함수 다루기(default value, Rest Parameters, void & return, 화살표 함수)
- 클린코드 자바스크립트 7-3 함수 다루기(Callback Function, 순수 함수, Closure)
함수 다루기 😎
default value👍
function createCarousel(options) {
var options = options || {};
var margin = options.margin || 0;
var center = options.center || false;
var navElement = options.navElement || "div";
return {
margin,
center,
navElement,
};
}
// 객체 구조 분해 이용
function createCarousel2({
margin = 0,
center = false,
navElement = "div",
} = {}) {
return {
margin,
center,
navElement,
};
}
createCarousel(); // default value
createCarousel2(); // default value
- default parameter 적용
const required = (argName) => {
throw new Error("required is " + argName);
};
function createCarousel({
items = required("items"),
margin = 0,
center = false,
navElement = "div",
} = {}) {
return {
margin,
center,
navElement,
};
}
console.log(createCarousel({ center: true, navElement: "span" })); // "required is items"
Rest Parameters👍
- 나머지 매개변수는 가장 마지막에 들어가야 한다.
- 인자가 가변적으로 들어올 때 유용하다.
- 유사배열객체가 아닌 배열로 사용 가능하다.
function sumTotal() {
typeof arguments; //object
Array.isArray(arguments); // false
return Array.from(args).reduce((acc, curr) => acc + curr);
}
sumTotal(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// Rest Parameter로 들어온 것은 배열로 사용 가능
function sumTotal2(initialValue, bonusValue, ...args) {
Array.isArray(args); // true
console.log(initialValue); // 100
console.log(bonusValue); // 1000
return args.reduce((acc, curr) => acc + curr);
}
sumTotal2(100, 1000, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
void & return👍
- void는 undefined를 return 한다.
- return을 쓰지 않아도 되는데 굳이 사용하는 것을 방지하자.
function handleClick() {
return setState(false);
}
function showAlert(message) {
return alert(message);
}
// 개선
function handleClick2() {
setState(false);
}
function showAlert2(message) {
alert(message);
}
function test(sum1, sum2) {
const result = sum1 + sum2;
}
console.log(test(1, 2)); // undefined
function testVoidFunc() {
return test(1, 2);
}
console.log(testVoidFunc()); // undefined
- return이 있는 함수 => get…, is…
function isAdult(age) {
return age > 19;
}
function getUserName(name) {
return "유저 " + name;
}
const isFlag = isAdult(10);
console.log(isFlag); // false
화살표 함수(Arrow Function)👍
- 렉시컬 스코프를 바라보게 된다.
- 객체를 바라보지 않고 상위 문맥을 따르는 경우가 있다.
- this 사용시 화살표 함수를 주의해야한다.
const user = {
name: "Poco",
getName: () => {
return this.name;
},
};
console.log(user.getName()); // undefined
const user2 = {
name: "Poco",
getName() {
return this.name;
},
};
console.log(user2.getName()); // Poco
const user = {
name: "Poco",
getName: () => {
return this.name;
},
newFriends: () => {
// call, apply, bind 사용X
const newFriendList = Array.from(arguments);
return this.name + newFriendList;
},
};
const user2 = {
name: "Poco",
getName: () => {
return this.name;
},
newFriends: (...rest) => {
return this.name + rest;
},
};
const Person = (name, city) => {
this.name = name;
this.city = city;
};
const person = new Person("poco", "korea"); // Person is not a constructor
class Parent {
parentMethod() {
console.log("parentMethod");
}
parentMethodArrow = () => {
console.log("parentMethodArrow");
};
overrideMethod = () => {
return "parent";
};
}
class Chiled extends Parent {
chileMethod() {
super.parentMethodArrow();
}
overrideMethod() {
return "Child";
}
}
new Child().childMethod(); // Error 발생, 생성자 함수 내부에서 초기화가 되는 현상 발생
new Child().overrideMethod(); // 'Parent' 부모 메서드 호출
function* gen() {
yield () => ?? //문법적으로 지원 X
}
function* gen() {
yield function hello() {
//... some Code
}
}
주의할 점🌼
- this 동작 방식
- Class 입장에서의 Override, 부모 메서드 응용 단계
- new 산자 조합 X
- arguments, call, apply, bind X
- React ,Vue 등 라이브러리말고 Vanilla JS 사용시 주의 필요!