✓ 선언문(Declare statement)
- 변수나 함수를 선언 ex) var, let, const, function
- 컴파일 때 호이스팅
- 실행 시 괄호를 붙여서 실행
✓ 표현식(Expression)
- 항상 값으로 평가
- 값을 평가하고 결과를 생성
- 변수, 리터럴 값, 연산자 및 함수 호출 같은 것들의 조합
- ex) var y = 10, var = x + y, var result = function ( ) { return " Hello, World"; }
✓ 함수 선언문과 함수 표현식의 차이
- 호이스팅(hoisting) 영향 : 함수에 대한 선언을 실행 전에 미리 메모리에 등록하는 작업
✓ 함수 선언문(Function Declaration)
- 선언문은 선언(declare) 그 자체
- 실행 시 괄호를 붙여서 실행
- 함수 선언문이 코드 맨 앞단에 작성된 것처럼 작동하는 특징
- 호이스팅에 의해 스코프 최상단으로 끌어올려짐
- 컴파일 시점에 미리 메모리에 등록
- 함수가 선언되기 전에도 호출 가능
✓ 함수 표현식(Function Expression)
- 함수를 변수에 할당하는 방식
- 함수 이름은 선택사항
- 변수가 할당된 이후에만 사용 가능
- 컴파일 시점에 변수가 undefined로 초기화, 런타임 시점에 변수에 함수가 할당되어 작동
✓ 호이스팅
- 코드 실행 전, 변수 및 함수 선언이 스코프 최상단으로 끌어올려지는 매커니즘
- 코드 실행 단계에서 변수나 함수를 선언하기 전에도 참조
- 선언문만 해당
- 초기화 비해당
- 변수는 선언 시에 메모리에 할당(undefined), 초기화(값 할당)는 실제 코드의 실행 위치에 따라 결정
- 함수 선언문은 호이스팅되어 어디에서든지 호출 가능
- 함수 표현식은 변수가 할당된 이후에만 호출 가능
✓ const var let
- var : 호이스팅 O, 초기화는 실제 선언된 위치에 남으므로 선언 전에 참조할 경우 undefined
- let / const : 호이스팅 O, var와 달리 TDZ가 존재, 선언되기 전에 참조하면 Reference error
✓ TDZ(Temporal Dead Zone)
- 선언된 변수가 실제 선언된 위치에 도달할 때까지 변수를 참조할 수 없는 영역
✓ this 바인딩
- 일반함수 : 전역
- 화살표함수 : 상위
- 메서드 : 해당 메서드를 호출한 객체
- 클래스 : 해당 클래스의 인스턴스
✓ 일급 객체(First-Class Object)
- 변수에 할당 가능
- 함수 인자로 전달 가능
- 함수의 반환값으로 사용 가능
- 런타임에 생성
- 일급 함수(First-Class Function) : 함수가 일급 객체의 특성을 모두 갖춘 경우
- ex) 자바스크립트 함수
✓ examples
add(); // Hi
console.log(y); // ReferenceError: y is not defined
funtion add () {
console.log('Hi');
}
console.log(y); // undefined
var y = 19;
add(); // TypeError: add is not a function
const add = function(){
console.log('hi');
}
add(); // TypeError: add is not a function
var add = function(){
console.log('hi');
}
function print(){
console.log(this);
}
print(); // Window {...} // Node : global
const print = () => {
console.log(this);
}
print(); // 상위 스코프의 this
const user = {
say(){
console.log(this)
}
}
user(); // { say: [Function: say] }
'JavaScript' 카테고리의 다른 글
240511 리액트 스터디 : JavaScript 클래스 / 클로저 (0) | 2024.05.11 |
---|---|
Deep Dive : JavaScript 클래스 / 클로저 (0) | 2024.05.11 |
Deep Dive : Javascript 동등비교 / 함수 (0) | 2024.05.04 |
map(), set() (0) | 2024.01.23 |
reduce() (0) | 2024.01.23 |