πŸ“ŒLanguage/JavaScript

[Deep Dive] μŠ€μ½”ν”„μ™€ μŠ€μ½”ν”„ 체인

hellohailie 2022. 12. 2. 22:06

βœ”οΈ 이번 정독을 톡해 μ•Œκ²Œ 된 것
μŠ€μ½”ν”„λž€ λ¬΄μ—‡μΈκ°€μš”?
블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ„€λͺ…ν•΄λ³΄μ„Έμš”.
μŠ€μ½”ν”„ 체인이 λ¬΄μ—‡μΈκ°€μš”?

 

<λ‹΅ 미리보기>

πŸ€” μŠ€μ½”ν”„κ°€ λ¬΄μ—‡μΈκ°€μš”? 

πŸ€“ μŠ€μ½”ν”„λŠ” μ‹λ³„μžκ°€ μœ νš¨ν•œ λ²”μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€. λͺ¨λ“  μ‹λ³„μž(λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ…, 클래슀λͺ… λ“±)λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” μŠ€μ½”ν”„κ°€ κ²°μ •λ©λ‹ˆλ‹€. 

 

πŸ€” λΈ”둝 레벨 μŠ€μ½”ν”„λ₯Ό μ„€λͺ…ν•΄λ³΄μ„Έμš”.

πŸ€“ ν•¨μˆ˜ λ‚΄λΆ€ 뿐만 μ•„λ‹ˆλΌ λͺ¨λ“  μ½”λ“œ λΈ”λŸ­(if, for, while, try/catch)이 지역 μŠ€μ½”ν”„λ₯Ό λ§Œλ“œλŠ” 것이 블둝 레벨 μŠ€μ½”ν”„μ΄κ³  let, const κ°€ 이에 ν•΄λ‹Ήλ©λ‹ˆλ‹€. 

 

πŸ€” μŠ€μ½”ν”„ 체인이 λ¬΄μ—‡μΈκ°€μš”?

πŸ€“ μŠ€μ½”ν”„κ°€ κ³„μΈ΅μ μœΌλ‘œ μ—°κ²°λœ 것을 μŠ€μ½”ν”„ 체인이라고 ν•˜λŠ”λ°, λͺ¨λ“  지역 μŠ€μ½”ν”„μ˜ μ΅œμƒμœ„ μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„μž…λ‹ˆλ‹€.

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

 

 


βœ”οΈ μŠ€μ½”ν”„

μŠ€μ½”ν”„λŠ” μ‹λ³„μžκ°€ μœ νš¨ν•œ λ²”μœ„λ₯Ό λ§ν•©λ‹ˆλ‹€. 

 

λͺ¨λ“  μ‹λ³„μž(λ³€μˆ˜λͺ…, ν•¨μˆ˜λͺ…, 클래슀λͺ… λ“±)λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” 유효 λ²”μœ„κ°€ κ²°μ •λ©λ‹ˆλ‹€. 

 

 

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

μŠ€μ½”ν”„ λ‚΄μ—μ„œ μ‹λ³„μžλŠ” μœ μΌν•΄μ•Ό ν•˜μ§€λ§Œ λ‹€λ₯Έ  μŠ€μ½”ν”„μ—λŠ” 같은  μ΄λ¦„μ˜ μ‹λ³„μžλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 

 

β–  ν•¨μˆ˜μ˜ λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€μ—μ„œλ§Œ μ°Έμ‘°ν•  수 있고 ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†λ‹€. 

===> λ§€κ°œλ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆλŠ” μœ νš¨λ²”μœ„(μŠ€μ½”ν”„)κ°€ ν•¨μˆ˜ λ‚΄λΆ€λ‘œ ν•œμ •λ˜κΈ° λ•Œλ¬Έμ΄λ‹€. 

 

β– 

let x = 'global';

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

foo();

console.log(x); // global

πŸ‘‰ μ½”λ“œμ˜ κ°€μž₯ λ°”κΉ₯ μ˜μ—­μ— μ„ μ–Έλœ λ³€μˆ˜ xλŠ” μ–΄λ””μ„œλ“   μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ foo ν•¨μˆ˜ 내뢀에 μ„ μ–Έλœ λ³€μˆ˜ xλŠ” foo ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ°Έμ‘°ν•  수 있고 foo ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μ°Έμ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ΄λ•Œ λ‘κ°œμ˜ λ³€μˆ˜ xλŠ” μ‹λ³„μž 이름이 λ™μΌν•˜μ§€λ§Œ μžμ‹ μ΄ μœ νš¨ν•œ λ²”μœ„, 즉 μŠ€μ½”ν”„κ°€ λ‹€λ₯Έ λ³„κ°œμ˜ λ³€μˆ˜μž…λ‹ˆλ‹€. 

 

 

μ°Έκ³ )

var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 같은 μŠ€μ½”ν”„ λ‚΄μ—μ„œ 쀑볡 선언이 ν—ˆμš©λ˜μ„œ λ§Žμ€ λΆ€μž‘μš©μ„ μΌμœΌν‚΅λ‹ˆλ‹€. 

const, let ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” 같은 μŠ€μ½”ν”„ λ‚΄μ—μ„œ 쀑볡 선언을 ν—ˆμš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 

 


βœ”οΈ μŠ€μ½”ν”„ 체인

λͺ¨λ“  μŠ€μ½”ν”„λŠ” ν•˜λ‚˜μ˜ 계측적 ꡬ쑰둜 μ—°κ²°λ˜λ©°, λͺ¨λ“  지역 μŠ€μ½”ν”„μ˜ μ΅œμƒμœ„ μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„μž…λ‹ˆλ‹€. μ΄λ ‡κ²Œ μŠ€μ½”ν”„κ°€ κ³„μΈ΅μ μœΌλ‘œ μ—°κ²°λœ 것을 μŠ€μ½”ν”„ 체인이라고 ν•©λ‹ˆλ‹€. 

 

 

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

 

===> μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ λ³€μˆ˜λŠ” ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ 자유둭게 μ°Έμ‘°ν•  수 μžˆμ§€λ§Œ ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ λ³€μˆ˜λ₯Ό μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μ°Έμ‘°ν•  수 μ—†μŠ΅λ‹ˆλ‹€.

 

 


βœ”οΈ var 와 ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„ // let, const 와 블둝 레벨 μŠ€μ½”ν”„

β˜… var ν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ§Œ μΈμ •ν•˜κΈ° λ•Œλ¬Έμ— μ½”λ“œ 블둝 λ‚΄μ—μ„œ μ„ μ–Έλ˜μ—ˆμ–΄λ„ λͺ¨λ‘ μ „μ—­ λ³€μˆ˜κ°€ λœλ‹€. ==> μ˜λ„μΉ˜ μ•Šκ²Œ 값이 μž¬ν• λ‹Ήλ˜λŠ” λΆ€μž‘μš©μ΄ 생길 수 μžˆλ‹€. 

β˜… let, const ν‚€μ›Œλ“œλŠ” 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•˜μ—¬, ν•¨μˆ˜ λ‚΄λΆ€ 뿐만 μ•„λ‹ˆλΌ λͺ¨λ“  μ½”λ“œ λΈ”λŸ­(if, for, while, try/catch)이 지역 μŠ€μ½”ν”„λ₯Ό λ§Œλ“ λ‹€. 

 

 


βœ”οΈ λ ‰μ‹œμ»¬ μŠ€μ½”ν”„ (정적 μŠ€μ½”ν”„)

var x = 1;

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

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

foo(); 
bar();

 

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό λ”°λ₯Έλ‹€. κ·Έλž˜μ„œ ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ μ •μ˜ν–ˆλŠ”μ§€μ— 따라 μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ‹€. 

===> ν•¨μˆ˜μ˜ μƒμœ„ μŠ€μ½”ν”„λŠ” μ–Έμ œλ‚˜ μžμ‹ μ΄ μ •μ˜λœ μŠ€μ½”ν”„μ΄λ‹€. 

 

λ”°λΌμ„œ μœ„ 예제λ₯Ό μ‹€ν–‰ν•˜λ©΄ μ „μ—­ λ³€μˆ˜ x의 κ°’ 1을 두 번 좜λ ₯ν•œλ‹€. 

 

(ν•¨μˆ˜κ°€ 호좜된 μœ„μΉ˜λŠ” μƒμœ„ μŠ€μ½”ν”„ 결정에 μ–΄λ–€ν•œ 영ν–₯을 주지 μ•ŠλŠ”λ‹€. )

 

 

μΆ”κ°€ κ³΅λΆ€ν•˜κΈ°

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λŠ” ν΄λ‘œμ €μ™€ κΉŠμ€ 관계가 μžˆλ‹€. 

 

 

 

 

πŸ‘©‍πŸ’» λͺ¨λ˜ μžλ°”μŠ€ν¬λ¦½νŠΈ Deep Diveλ₯Ό μ •λ…ν•˜κ³  μ œκ°€ μ΄ν•΄ν•œ λ‚΄μš©μ„ μ •λ¦¬ν•œ κΈ€μž…λ‹ˆλ‹€ πŸ‘©‍πŸ’»