
React에서 함수형 Component를 사용하는데 함수선언과 화살표함수에서 export default를 사용 차이가 있다는걸 발견하였다. 이에 궁금증이 생겨 함수선언식과 함수표현식에 대해 다시 공부해야겠다는 생각이 들었고, 그동안 함수를 사용할줄알았지 두 개념의 차이를 몰랐다는 것에 부끄러움이 느껴졌다.. 배웠던 내용인데 복습이 꼼꼼하지 않아 궁금증이 계속생기고있어 배운것이외의 공부를 하지 않은 점에 대해 반성을 하게 되었고 이제 해당부분들을 꼼꼼히 메우려고한다.
undefined가 반환됨함수 선언 함수표현식 생성자First-Class object
프로그래밍 언어에서 함수가 다른 변수처럼 처리될 때 first-class object라 한다.
예를들어 함수가 다른함수에 인자로 전달되거나 다른함수에 의해 반환될 수 있고 변수에 값으로 할당 될 수있다.
// 생성자
const add = new Function("x", "y", "return x + y");
// 선언
function add(x, y) {
return x + y;
} // No need for semicolon here
// 표현식; 변수에 할당되는 익명 함수입니다.
const add = function (x, y) {
return x + y;
};
// 표현식; 고유한 이름을 가집니다.
const add = function funcName(x, y) {
return x + y;
};
// 화살표 함수
const multiply = (x, y) => x + y;
// 메서드
const obj = {
//객체안에 사용
add(x, y) {
return x + y;
},
};
undefined를 반환, 반환값을 지정하려면 return 필요function객체로 function객체의 모든속성, 메서드 및 행위 특성을 갖음function `함수이름` ('parameter'){
'statement'
}
function calcRectArea(width, height){
return width * height ;
}
const 변수 = function 함수이름 (매개변수) {
statement;
}
const getRectArea = function (width, height) {
return width * height;
};
//callback함수로 사용
button.addEventListener("click", function (event) {
console.log("button is clicked!");
});
{가 아닌 경우에만 화살표 함수에 간결한 본문이 있는 것으로 간주//사용예
// 기존의 익명 함수
(function (a, b) {
const chuck = 42;
return a + b + chuck;
});
// 화살표 함수
(a, b) => {
const chuck = 42;
return a + b + chuck;
};
// 기존 함수
function bob(a) {
return a + 100;
}
// 화살표 함수
const bob2 = (a) => a + 100;
const func = (x) => x * x;
// 간결한 본문 구문, 암시적 "반환"
const func2 = (x, y) => {
return x + y;
};
// 블록 본문을 포함, 명시적 "반환" 필요
// 빈 화살표 함수는 정의되지 않은 값을 반환합니다.
const empty = () => {};
(() => "foobar")();
// "foobar"를 반환합니다.
// (즉시 호출되는 함수 표현식입니다.)
const simple = (a) => (a > 15 ? 15 : a);
simple(16); // 15
simple(10); // 10
const max = (a, b) => (a > b ? a : b);
// 간단한 배열 필터링, 매핑 등
const arr = [5, 6, 13, 0, 1, 18, 23];
const sum = arr.reduce((a, b) => a + b);
// 66
const even = arr.filter((v) => v % 2 === 0);
// [6, 0, 18]
const double = arr.map((v) => v * 2);
// [10, 12, 26, 0, 2, 36, 46]
// 보다 간결한 프로미스 체인
promise
.then((a) => {
// …
})
.then((b) => {
// …
});
// 시각적으로 더 쉽게 구문 분석할 수 있는 매개변수 없는 화살표 함수
setTimeout(() => {
console.log("I happen sooner");
setTimeout(() => {
// deeper code
console.log("I happen later");
}, 1);
}, 1);
참고 : 호이스팅
출처 : mdn문서