함수 선언식: function helloA() {}
함수 표현식: let helloB = function() {}
화살표 함수: let hello = () ⇒ {}
함수 선언식
함수 이름을 선언해서 표현하는 방식
💡 호이스팅이 일어난다.
// 호이스팅이 일어나 에러가 발생하지 않음
console.log(helloA()) // '안녕하세요.'
function helloA () {
return '안녕하세요.'
}
함수 표현식
함수를 변수에 담아서 표현하는 방식, 호이스팅이 일어나지 않는다.
// 호이스팅이 일어나지 않아 에러 발생
console.log(helloB()) // Error
let helloB = function () {
return '안녕하세요.';
}
화살표 함수
함수 표현식에서 function 텍스트를 생략하고 화살표로 대신하는 방식
- 화살표 함수는 익명 함수로만 만들 수 있다.
- 생성자로 사용할 수 없다.
- 스스로의 this, argument를 가지지 않는다.
- 화살표 함수가 어떻게 사용되거나 호출되어도 this는 바뀌지 않는다.
- return 하지 않아도 값이 반환된다.
💡 화살표 함수는 스스로의 this 를 가지지 않는다.
화살표 함수에서의 this는 Lexical this 로, 렉시컬 컨텍스트 안의 this값을 가리킨다.
즉, 자신이 정의된 스코프 안에 존재하는 this를 가리킨다.
그러므로 우리는 객체의 메소드를 화살표 함수로 정의하면 안된다.
// 호이스팅이 일어나지 않아 에러 발생
console.log(hello ()) // Error
let hello = () => {
return '안녕하세요.'
};
// return 이 하나만 있다면 아래처럼 중괄호{} 생략 가능
let hello = () => '안녕하세요';
let hello = {
text : '안녕하세요.',
helloFunc: function(){
console.log(this.text); // '안녕하세요.'
setTimeout(() => {
console.log(this.text); // '안녕하세요.' ==> 여기서의 this는 상위 스코프(hello) 안에 존재하는 this를 가리킨다.
}, 1000)
}
}
hello.helloFunc();
'Javascript' 카테고리의 다른 글
[Javascript] .substring() (0) | 2023.08.16 |
---|---|
[Javascript] .split() (0) | 2023.08.16 |
[Javascript] 호이스팅(hoisting) (0) | 2023.06.15 |
[Javascript] Scroll Spy (스크롤 스파이) 적용하기 (0) | 2023.02.10 |
[Javascript] 메뉴 클릭시 네비게이션 높이만큼 띄우고 섹션으로 이동하기 (0) | 2023.02.10 |