λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

λ¬Έμ œν’€κΈ°

[μžλ°”ν¬μŠ€λ¦½νŠΈ 이둠] μŠ€μ½”ν”„

μŠ€μ½”ν”„λž€?

λͺ¨λ“  μ‹λ³„μž(λ³€μˆ˜ 이름, ν•¨μˆ˜ 이름, 클래슀 이름 λ“±)λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” μœ νš¨λ²”μœ„κ°€ κ²°μ •λ˜λŠ”λ°, 이λ₯Ό μŠ€μ½”ν”„λΌ ν•œλ‹€. μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μŠ€μ½”ν”„λ₯Ό 톡해 μ–΄λ–€ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•΄μ•Όν•  것인지 μ‹λ³„μžλ₯Ό κ²°μ •ν•œλ‹€.

let x = 'global';

function foo(){
    let x = 'local';
    console.log(x);  
}

foo();
console.log(x);

//local
//global

 

λ§Œμ•½ μŠ€μ½”ν”„ κ°œλ…μ΄ μ—†λ‹€λ©΄ 같은 이름을 κ°–λŠ” λ³€μˆ˜λŠ” μΆ©λŒμ„ μΌμœΌν‚€λ―€λ‘œ ν”„λ‘œκ·Έλž¨ μ „μ²΄μ—μ„œ ν•˜λ‚˜λ°–μ— μ‚¬μš©ν•  수 μ—†λ‹€. λ”°λΌμ„œ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œλŠ” μŠ€μ½”ν”„(μœ νš¨λ²”μœ„)λ₯Ό 톡해 μ‹λ³„μžμΈ λ³€μˆ˜ μ΄λ¦„μ˜ μΆ©λŒμ„ λ°©μ§€ν•˜μ—¬ 같은 μ΄λ¦„μ˜ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 있게 ν•œλ‹€.


μŠ€μ½”ν”„μ˜ μ’…λ₯˜ [μ „μ—­κ³Ό 지역]

λ³€μˆ˜λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ μžμ‹ μ΄ μœ νš¨ν•œ λ²”μœ„μΈ μŠ€μ½”ν”„κ°€ κ²°μ •λœλ‹€. μ „μ—­ λ³€μˆ˜λŠ” μ–΄λ””μ„œλ“ μ§€ μ°Έμ‘°ν•  수 있고, 지역 λ³€μˆ˜λŠ” μžμ‹ μ˜ 지역 μŠ€μ½”ν”„μ™€ ν•˜μœ„ 지역 μŠ€μ½”ν”„μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆλ‹€.

 

 

μŠ€μ½”ν”„ 체인

μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진은 μŠ€μ½”ν”„ 체인을 톡해 λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” μ½”λ“œμ˜ μŠ€μ½”ν”„μ—μ„œ μ‹œμž‘ν•˜μ—¬ μƒμœ„ μŠ€μ½”ν”„ λ°©ν–₯으둜 μ΄λ™ν•˜λ©° μ„ μ–Έλœ λ³€μˆ˜λ₯Ό κ²€μƒ‰ν•œλ‹€. μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ λ²”μœ„λŠ” ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ 자유둭게 μ°Έμ‘°ν•  수 μžˆμ§€λ§Œ ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ λ³€μˆ˜λ₯Ό μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μ°Έμ‘°ν•  순 μ—†λ‹€.

 

 

블둝 레벨 μŠ€μ½”ν”„μ™€ ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„

letκ³Ό const ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” λͺ¨λ“  μ½”λ“œ 블둝(ν•¨μˆ˜, ifλ¬Έ, forλ¬Έ, whileλ¬Έ λ“±)을 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λŠ” 블둝 레벨 μŠ€μ½”ν”„μ΄κ³ , var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έν•œ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•˜λŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό λ”°λ₯Έλ‹€.
λ”°λΌμ„œ var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” forλ¬Έμ—μ„œ μ„ μ–Έλ˜μ—ˆλ”λΌλ„ λͺ¨λ‘ μ „μ—­ λ³€μˆ˜μ΄λ―€λ‘œ, 쀑볡 선언이 되고 κ·Έ κ²°κ³Ό μ˜λ„μΉ˜ μ•Šμ€ μ „μ—­ λ³€μˆ˜μ˜ 값이 μž¬ν• λ‹Ήλœλ‹€. 

var i = 1;

for(var i=0; i<5; i++){
	console.log(i);  //0 1 2 3 4 
}

console.log(i);  //5

 


λ ‰μ‹œμ»¬ μŠ€μ½”ν”„

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λž€ ν•¨μˆ˜κ°€ ν˜ΈμΆœλ˜λŠ” μ‹œμ μ— λ™μ μœΌλ‘œ μ‚¬μœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•˜λŠ” 동적 μŠ€μ½”ν”„μ™€ 달리, ν•¨μˆ˜ μ •μ˜κ°€ ν‰κ°€λ˜λŠ” μ‹œμ μ— μƒμœ„ μŠ€μ½”ν”„κ°€ μ •μ μœΌλ‘œ κ²°μ •λ˜λ©°, μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό λ”°λ₯Έλ‹€. 즉, ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ ν˜ΈμΆœν–ˆλŠ”μ§€κ°€ μ•„λ‹ˆλΌ ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ μ •μ˜ν–ˆλŠ”μ§€μ— 따라 μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ‹€. ν•¨μˆ˜κ°€ 호좜된 μœ„μΉ˜λŠ” μƒμœ„ μŠ€μ½”ν”„ 결정에 μ–΄λ– ν•œ 영ν–₯을 주지 μ•ŠλŠ”λ‹€.

let x = 1;

function foo(){
    let x= 10;
    bar();
}

function bar(){
    console.log(x);
}

foo();  //1
bar(); //1


β€»λ³Έ κ²Œμ‹œλ¬Όμ€ λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Dive 책을 κ³΅λΆ€ν•˜κ³  μš”μ•½ν•œ λ‚΄μš©μ΄λ‹€.