hoisting

스코프 어디에 있던 최상위에 있는 것처럼 동작

 let 
 var 
 const


ex. 
var name = 'mike';
console.log(name) 

== 

console.log(name) 
var name = 'mike';


 * Temporal Dead Zone
let, const도 hoisting으로 작동하나
TDZ의 영향을 받음. (할당 전에 사용 불가)
 * TDZ는 코드를 예측 가능하게 하고, 잠재적인 버그를 대비

ex.
let age =30;
funmciton showAge(){
 console.log(age);
}
------------------------------

let age =30;
function showAge(){
 console.log(age);

  let age = 20;

}

showAge(); // 불가 

'let age = 20;' 가 Scope를 만들고 hoisting을 일으킴.

변수의 생성과정
선언 : var는 선언과 초기화를 동시에. (할당전 호출 시, undefined) // let은 선언과 초기화가 분리 (초기화는 실제 코드에 도달햇을때 동작) // const는 선언 초기화 할당 동시에
-> 초기화 
-> 할당

var : 함수 스코프(function-scoped)
let, const : 블록 스코프(block-scoped)
 * 블록 스코프: 모든 선언문은 코드 블록 내에서만 유효

[캡처]

if문 안에서 선언한 var 변수는
if문 바깥에서도 사용 가능
 
ex. 

const age = 30;

if(age>19){
 var txt = '성인';
}
console.log(txt);

* var는 전역함수/선언이기 때문에 코드 전체에 영향을 미칠 수 있으므로 사용을 권장하지 않음. (code의 무결성 훼손)

let/const로 선언하는 것을 권장함.

복사했습니다!