λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ’» ν”„λ‘ νŠΈμ—”λ“œ/πŸ“š JS

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

by megan07 2023. 12. 27.

 

πŸ“Œ μŠ€μ½”ν”„(Scope)

: λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ²”μœ„ = (μ‹λ³„μžλ₯Ό μ°Ύμ•„λ‚΄κΈ° μœ„ν•œ κ·œμΉ™)

 

μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„μ™€ 지역 μŠ€μ½”ν”„λ‘œ λ‚˜λˆŒ 수 μžˆμŠ΅λ‹ˆλ‹€.
λ³€μˆ˜λŠ” μ„ μ–Έ μœ„μΉ˜μ— μ˜ν•΄ μŠ€μ½”ν”„λ₯Ό κ°–κ²Œ λ©λ‹ˆλ‹€.

 

μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ°–λŠ” μ „μ—­ λ³€μˆ˜λŠ” μ „μ—­μ—μ„œ μ°Έμ‘° κ°€λŠ₯ν•˜κ³ ,
지역 μŠ€μ½”ν”„λ₯Ό κ°–λŠ” 지역 λ³€μˆ˜λŠ” μ„ μ–Έλœ 지역과 ν•˜λΆ€ μ§€μ—­μ—μ„œλ§Œ μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

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

 

 

μŠ€μ½”ν”„ 체인

 

μ „μ—­ 객체와 μ€‘μ²©λœ ν•¨μˆ˜μ˜ μŠ€μ½”ν”„ 레퍼런슀λ₯Ό μ°¨λ‘€λ‘œ μ €μž₯ν•˜κ³ , μŠ€μ½”ν”„κ°€ μ–΄λ–»κ²Œ μ—°κ²° 되고 μžˆλŠ”μ§€ λ³΄μ—¬μ£ΌλŠ” 것을 λ§ν•©λ‹ˆλ‹€.
μ‹λ³„μžμ™€ μŠ€μ½”ν”„λŠ” μ‹€ν–‰ μ»¨ν…μŠ€νŠΈμ˜ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ κ΄€λ¦¬ν•©λ‹ˆλ‹€.
λ ‰μ‹œμ»¬ ν™˜κ²½μ€ μ‹λ³„μžμ™€ μ‹λ³„μžμ— λ°”μΈλ”©λœ κ°’, μƒμœ„ μŠ€μ½”ν”„μ— λŒ€ν•œ μ°Έμ‘°λ₯Ό κΈ°λ‘ν•˜λŠ” 자료ꡬ쑰둜, μ‹€ν–‰ μ»¨ν…μŠ€νŠΈλ₯Ό κ΅¬μ„±ν•©λ‹ˆλ‹€.

 

 

 

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

ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„
ν•¨μˆ˜ μ½”λ“œ 블둝 μ•ˆμ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜κ³  μ™ΈλΆ€μ—μ„œ μ°Έμ‘°ν•  수 μ—†λ‹€.

블둝 레벨 μŠ€μ½”ν”„
μ½”λ“œ 블둝(ifλ¬Έ, forλ¬Έ λ“±) μ•ˆμ—μ„œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ½”λ“œ 블둝 λ‚΄μ—μ„œλ§Œ μœ νš¨ν•˜κ³  μ™ΈλΆ€μ—μ„œ μ°Έμ‘°ν•  수 μ—†λ‹€.

 

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„μ΄μ§€λ§Œ
let, constλ₯Ό μ‚¬μš©ν•˜λ©΄ 블둝 레벨 μŠ€μ½”ν”„ μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.

 

var global = 'global';

function test(){

	if(1){
      var a='a';
      const b='b';
   	}
    
    console.log(global); // 'global'
    console.log(a); // 'a'
    console.log(b); // "ReferenceError: b is not defined
	}
  

test();

/**
* global의 경우 μ „μ—­μ—μ„œ 선언됐기에 μ „μ—°λ³€μˆ˜κ°€ λ©λ‹ˆλ‹€.
* var둜 μ„ μ–Έλœ λ³€μˆ˜ aλŠ” μ½”λ“œ 블둝 λ°”κΉ₯μ—μ„œ 접근이 κ°€λŠ₯ν•©λ‹ˆλ‹€.
* const둜 μ„ μ–Έν•œ λ³€μˆ˜ bλŠ” 블둝 레벨 μŠ€μ½”ν”„κ°€ μ μš©λ˜μ–΄ referenceErrorλ₯Ό λ±‰μŠ΅λ‹ˆλ‹€.
*/ 



λ ‰μ‹œμ»¬ μŠ€μ½”ν”„(Lexical Scope)

μŠ€μ½”ν”„κ°€ ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ κ²°μ •λ˜λŠ” 것을 λ§ν•©λ‹ˆλ‹€.

const a = 'global';

function A(){
  const a = 'a';
  console.log(a); // 'a'
  B();
}

function B(){
  const b='b';
  
  function C(){
    
    const c='c'

    console.log(a); // 'global'
    console.log(b); // 'b'
    console.log(c); // 'c' 
    
  }
  
  C();
  
}

A();
B();


/**
* μŠ€μ½”ν”„λŠ” ν•¨μˆ˜κ°€ μ„ μ–Έλœ μœ„μΉ˜κ°€ κΈ°μ€€μœΌλ‘œ 정해지기 λ•Œλ¬Έμ—
* ν•¨μˆ˜ Aμ—μ„œ ν•¨μˆ˜ Bλ₯Ό ν˜ΈμΆœν•œλ‹€κ³  해도
* ν•¨μˆ˜ Cμ—μ„œ 좜λ ₯λ˜λŠ” λ³€μˆ˜ aλŠ” μ „μ—­λ³€μˆ˜ aμž…λ‹ˆλ‹€.
* 
* ν•¨μˆ˜ C μŠ€μ½”ν”„ 체인
* ν•¨μˆ˜ C -> ν•¨μˆ˜ B -> μ „μ—­
*/