호이스팅, this

김용희·2023년 2월 27일
0

변수 선언 3단계
선언 단계(Declaration phase) : 변수를 실행 컨텍스트의 변수 객체에 등록하는 단계를 의미합니다. 이 변수 객체는 스코프가 참조하는 대상

초기화 단계(Initialization phase) : 실행 컨텍스트에 존재 하는 변수 객체에 선언 단계의 변수를 위한 메모리를 만드는 단계 입니다. 이 단계에서 할당된 메모리에는 undefined로 초기화

할당 단계(Assignment phase) : 사용자가 undefined로 초기화된 메모리의 다른 값을 할당하는 단계

es5
var 함수레벨의유효범위

console.log(name); // undefined   
name = ‘Mark’; 
console.log(name); //mark
var name = ‘woongjae’;

es6
let,const 블록레벨의 유효범위

console.log(name);
name = ‘mark’
//TDZ(Temporal Dead Zone 스코프의 시작 지점부터 초기화 시작 지점까지의 구간
let name;

es5
함수선언식은 호이스팅 o.

function hello(){
 console.log(‘hello’);
}
hello();

hello2(); // O
function hello2(){
 console.log(‘hello’);
}

es6
함수표현식은 호이스팅 x

hello3(); X
const hello3 = () =>{
	return console.log(‘hello3’);
}

가급적 호이스팅형식을 쓰지말아야할이유
1.의도하지않은 범위에서 변수사용
2.그만큼 메모리차지 -> 메모리 누수
3.코드 가독성

es5를 이해하면 좋은 이유
1.ES6를 어디에서든 쓸 수 있으려면 아직 시간이 더 필요하므로 ES5로 트랜스컴파일을 해야한다.
따라서 var가 어떻게 동작하는지 이해하고 있어야 한다.
2.es6는 es5를 포함하고 있으므로 js이해를위해

profile
He threw his knapsack over the brick wall

0개의 댓글