유데미 강의 JavaScript 완벽 가이드 : 초급 + 고급 마스터 과정을 들으면서 자바스크립트를 다시 한 번 익히는 중이다. 계속되는 포스팅에서 강의를 듣고 미처 몰랐던 부분, 심화 이해가 필요한 부분에 대해 주제별로 간단하게 기록한다.
function functionName(parameters) {
}
let functionName = function(parameters) {
}
함수 선언문은 코드가 실행되기 전에 자바스크립트 엔진에 의해 로드, 함수 표현식은 코드 실행 중에 평가된다. 따라서 함수 표현식으로 정의된 함수는 그 함수가 평가되기 전에는 호출할 수 없다. 이 차이점만 유의하도록 하자.
그러나 모든 상황에서 화살표 함수가 더 좋은 선택이라는 것은 아니다. 예를 들어, 메서드 정의나 생성자 함수, 객체 메서드에서의 this 바인딩 등에서는 화살표 함수보다 기존의 function 키워드를 사용하는 함수가 더 적절할 수 있다.
function greet(name = "World", greeting) {
console.log(`${greeting}, ${name}!`);
}
greet(undefined, "Hi");
function greet(greeting, name = "World") {
console.log(`${greeting}, ${name}!`);
}
greet("Hi")
가독성과 이해도: 매개변수의 순서는 함수의 사용법을 이해하는 데 중요한 역할을 한다. 기본값을 갖는 매개변수가 뒤에 있으면, 함수를 읽는 사람은 더 중요한 매개변수(즉, 생략하면 안 되는 매개변수)가 앞에 있음을 알 수 있다.
기본값에 앞에 있는 매개 변수 활용 가능
function greet(name = 'World', greeting = `Hi ${name}`) {
console.log(greeting);
}
greet();
bind() 메서드는 주어진 this 값과 초기 인수를 사용하여 새로운 함수를 만드는 함수.
const combine = (resultHandler, operator, ...numbers) => {
const validateNum = (number) => (isNaN(number) ? 0 : number);
let sum = 0;
for (const num of numbers) {
if(operator === 'ADD'){
sum += validateNum(num);
} else {
sum -= validateNum(num);
}
}
resultHandler(sum);
};
// message : bind()에서 넘겨진 인자
// result : resultHandler할 때 넘겨준 인자 sum, 호출할 때 인자는 bind한 매개변수 뒤에 자동으로 첨부
const showResult = (message, result) => {
alert(message + result);
};
combine(showResult.bind(this, 'Adding result is:'), 'ADD', 1, 4, 'afnlf');
combine(showResult.bind(this, 'Subtracting result is:'), 'SUBTRACT', 1, 4);