πŸ§‘‍πŸ’» Web/JavaScript

[JS] μŠ€μ½”ν”„(2) - μŠ€μ½”ν”„ 체인, ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„, λ ‰μ‹œμ»¬ μŠ€μ½”ν”„

Lennon 2021. 11. 27. 00:10
728x90
λ°˜μ‘ν˜•

https://parkparkpark.tistory.com/51

 

[JS] μŠ€μ½”ν”„(1) - μ „μ—­, 지역 μŠ€μ½”ν”„μ— λŒ€ν•΄

이번 ν¬μŠ€νŒ…μ€ μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ€‘μš”ν•œ κ°œλ…μΈ μŠ€μ½”ν”„μ— λŒ€ν•΄ μž‘μ„±ν•΄λ³΄λ € ν•œλ‹€. μŠ€μ½”ν”„ = 유효 λ²”μœ„ μŠ€μ½”ν”„λŠ” λ³€μˆ˜ 그리고 ν•¨μˆ˜μ™€ 관련이 κΉŠλ‹€. ν•¨μˆ˜ λ‚΄μ˜ λ§€κ°œλ³€μˆ˜λŠ” ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μ°Έμ‘°ν•  수

parkparkpark.tistory.com

 

μŠ€μ½”ν”„ 체인

ν•¨μˆ˜λŠ” ν•¨μˆ˜ 내에 μ„ μ–Έν•  수 μžˆμ–΄ ν•¨μˆ˜λŠ” μ€‘μ²©λ˜μ–΄ μžˆμ„ μˆ˜λ„ μžˆλ‹€. μ΄λŠ” ν•¨μˆ˜μ˜ 지역 μŠ€μ½”ν”„λ„ 쀑첩될 수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.

즉 μŠ€μ½”ν”„λŠ” ν•¨μˆ˜μ˜ 쀑첩에 μ˜ν•΄ 계측적인 ꡬ쑰λ₯Ό κ°–λŠ”λ‹€. 

 

let x = 1;

function fun1(){
    let y = 2;
    
    function fun2(){
    	let x = 3;
    }
    
    fun2()
}

ν•΄λ‹Ή μ½”λ“œμ—μ„œ μŠ€μ½”ν”„λ₯Ό 뢄석해보면

 

μ „μ—­ μŠ€μ½”ν”„: x = 1 , fun1()

               

fun1 지역 μŠ€μ½”ν”„: y = 2 , fun2()

 

fun2 지역 μŠ€μ½”ν”„: x = 3

 

μ΄λ ‡κ²Œ λ‚˜λˆŒ 수 μžˆλ‹€.

 

이처럼 μŠ€μ½”ν”„κ°€ κ³„μΈ΅μ μœΌλ‘œ μ—°κ²°λœ 것을 μŠ€μ½”ν”„ 체인이라 ν•œλ‹€. 

 

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

λ³€μˆ˜λ₯Ό μ°ΎλŠ”λ‹€. 이λ₯Ό 톡해 μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ μ°Έμ‘°ν•  수 μžˆλ‹€.

 

μŠ€μ½”ν”„μ˜ 계측적 κ΅¬μ‘°λŠ” 상속과 μœ μ‚¬ν•˜λ‹€. ν•¨μˆ˜λ“  μ½”λ“œ 블둝이든 ν•˜μœ„ μŠ€μ½”ν”„μ—μ„œ μœ νš¨ν•œ λ³€μˆ˜λ₯Ό μƒμœ„ μŠ€μ½”ν”„μ—μ„œ μ°Έμ‘°ν•  수 μ—†λ‹€.

for(let i = 0; i < 10; i++){
    console.log(num); // 였λ₯˜λ°œμƒ 
    for(let j = 0; j < 10; j++){
       let num = 10;
    }
}

 

μ•„λž˜ μ½”λ“œμ—μ„œ console창으둜 1κ³Ό 2쀑 뭐가 좜λ ₯될지 ν•œ 번 μƒκ°ν•΄λ³΄μž.

function fuc1(){
    console.log(1);
}

function fuc2() {
    function fuc1(){
        console.log(2);
    }
    fuc1();
}

fuc2();

 

ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μž‘μ„±ν•œ ν•¨μˆ˜λŠ” λŸ°νƒ€μž„ 이전에 ν•¨μˆ˜ 객체가 λ¨Όμ € μƒμ„±λœλ‹€. 즉 닡은 2이닀.

ν•¨μˆ˜λ„ μ‹λ³„μžμ— ν•΄λ‹Ήν•˜κΈ° λ•Œλ¬Έμ— μŠ€μ½”ν”„λ₯Ό 가진닀.

 

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

 

 

λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” ν•¨μˆ˜ λͺΈμ²΄ 뿐만 μ•„λ‹ˆλΌ λͺ¨λ“  μ½”λ“œ 블둝 λ˜ν•œ 지역 μŠ€μ½”ν”„λ₯Ό λ§Œλ“ λ‹€. ν•˜μ§€λ§Œ μžλ°”μŠ€ν¬λ¦½νŠΈ 같은 κ²½μš°μ—” varν‚€μ›Œλ“œλ‘œ μ„ μ–Έλœ λ³€μˆ˜λŠ” μ˜€λ‘œμ§€ ν•¨μˆ˜μ˜ μ½”λ“œ λΈ”λ‘λ§Œμ„ 지역 μŠ€μ½”ν”„λ‘œ μΈμ •ν•œλ‹€.

 

var x = 10;

if(1){
   var x = 0;
}

console.log(x); // 0


var y = 100;

function fuc1(){
   var y = 10;
} 

console.log(y); // 100

varλŠ” let, const와 λ‹€λ₯΄κ²Œ 쀑볡 선언이 κ°€λŠ₯ν•˜κ³ , μ½”λ“œ 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ§€μ›ν•˜μ§€ μ•Šμ•„ 였λ₯˜λ₯Ό μΌμœΌν‚¬ κ°€λŠ₯성이 λ†’λ‹€.

즉 μ™ λ§Œν•˜λ©΄ letκ³Ό constλ₯Ό μ‚¬μš©ν•˜λ„λ‘ ν•˜μž!

 

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

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

μžλ°”μŠ€ν¬λ¦½νŠΈλ₯Ό ν¬ν•¨ν•œ λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄λŠ” λ ‰μ‹œμ»¬ μŠ€μ½”ν”„λ₯Ό λ”°λ₯Έλ‹€. 즉 ν•¨μˆ˜μ˜ 호좜 μœ„μΉ˜λ³΄λ‹€ μ •μ˜ μœ„μΉ˜λ₯Ό λ³Έλ‹€λŠ” 말이닀.

 

μžμ„Ένžˆ μ„€λͺ…ν•˜μžλ©΄, ν•¨μˆ˜κ°€ 호좜된 μœ„μΉ˜λŠ” μƒμœ„ μŠ€μ½”ν”„ 결정에 μ–΄λ– ν•œ 영ν–₯도 주지 μ•ŠλŠ”λ‹€. λ‹€μŒ μ½”λ“œλ₯Ό μ‚΄νŽ΄λ³΄μž.

 

let x = 1;

function fuc1(){
   let x = 10;
   fuc2();
}

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

fuc1(); // 1
fun2(); // 1

λ­”κ°€ 우리의 μ˜ˆμƒκ³Ό λ‹€λ₯΄κ²Œ fuc1, fuc2 ν•¨μˆ˜ λ‘˜ λ‹€ 1을 좜λ ₯ν•˜λŠ” λͺ¨μŠ΅μ„ λ³Ό 수 μžˆλ‹€.

fun2 ν•¨μˆ˜λŠ” μ „μ—­μ—μ„œ ν•¨μˆ˜ μ„ μ–Έλ¬ΈμœΌλ‘œ μ •μ˜λœ ν•¨μˆ˜μ΄λ‹€. 즉 μ „μ—­ λ³€μˆ˜ xλ₯Ό μ°Έμ‘°ν•΄ μ–΄λ””μ„œ ν˜ΈμΆœν•˜λ˜ fun2λ₯Ό μ‹€ν–‰ν•˜λ©΄ 1의 결괏값을 좜λ ₯ν•œλ‹€. 

 

이상 μŠ€μ½”ν”„μ— λŒ€ν•΄ 닀뀄봀닀. 

728x90
λ°˜μ‘ν˜•