μŠ€μ½”ν”„λž€ λ¬΄μ—‡μΌκΉŒ?

  • μ§μ—­ν•˜λ©΄ μ˜μ—­, λ²”μœ„λΌλŠ” 뜻
  • ν”„λ‘œκ·Έλž¨ μ–Έμ–΄μ—μ„œ μŠ€μ½”ν”„λŠ” '유효 λ²”μœ„'λ₯Ό μ˜λ―Έν•œλ‹€.
  • 즉, λͺ¨λ“  μ‹λ³„μž(λ³€μˆ˜ 이름, ν•¨μˆ˜ 이름 λ“±)λŠ” μžμ‹ μ΄ μ„ μ–Έλœ μœ„μΉ˜μ— μ˜ν•΄ λ‹€λ₯Έ μ½”λ“œκ°€ μ‹λ³„μž μžμ‹ μ„ μ°Έμ‘°ν•  수 μžˆλŠ” 유효 λ²”μœ„κ°€ κ²°μ •λœλ‹€.

μ΄λ•Œ, 이 μ‹λ³„μžκ°€ μœ νš¨ν•œ λ²”μœ„κ°€ λ°”λ‘œ μŠ€μ½”ν”„(Scope)이닀.


μŠ€μ½”ν”„μ˜ μ’…λ₯˜λ₯Ό μ•Œμ•„λ³΄μž!

μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„μ™€ 지역 μŠ€μ½”ν”„λ‘œ ꡬ뢄할 수 μžˆλ‹€.

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

  • μ½”λ“œμ˜ κ°€μž₯ λ°”κΉ₯ μ˜μ—­μ„ μ˜λ―Έν•œλ‹€
  • μ „μ—­ λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€λ©΄, 이 λ³€μˆ˜λŠ” μ „μ—­ μŠ€μ½”ν”„λ₯Ό κ°–κ²Œ 되기 λ•Œλ¬Έμ—, μ½”λ“œ λͺ¨λ“  κ³³μ—μ„œ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€

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

  • ν•¨μˆ˜ λͺΈμ²΄ λ‚΄λΆ€λ₯Ό μ˜λ―Έν•œλ‹€
  • ν•¨μˆ˜ 내뢀에 지역 λ³€μˆ˜λ₯Ό μ„ μ–Έν•œλ‹€λ©΄, 이 λ³€μˆ˜λŠ” 지역 μŠ€μ½”ν”„λ₯Ό κ°–κ²Œ 되기 λ•Œλ¬Έμ—, ν•¨μˆ˜ 외뢀인 μ „μ—­ μŠ€μ½”ν”„μ—μ„œλŠ” μ°Έμ‘°κ°€ λΆˆκ°€λŠ₯ν•˜λ‹€(= μ‚¬μš©ν•  수 μ—†λ‹€)

μ½”λ“œλ₯Ό 톡해 μ΅ν˜€λ³΄μž!

// μ „μ—­, 지역 μŠ€μ½”ν”„ 예제

var x = "λ‚˜λŠ” μ „μ—­!";

function localS(){
    var y = "λ‚˜λŠ” 지역!";
    console.log(y); // λ‚˜λŠ” 지역!
    // xλŠ” μ „μ—­ μŠ€μ½”ν”„λ₯Ό 가지기 λ•Œλ¬Έμ— μ ‘κ·Ό κ°€λŠ₯
    console.log(x); // λ‚˜λŠ” μ „μ—­! 
}

localS(); 
// yλŠ” 지역 μŠ€μ½”ν”„λ₯Ό 가지기 λ•Œλ¬Έμ— ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œλŠ” μ ‘κ·Ό λΆˆκ°€λŠ₯ 
console.log(y); // 였λ₯˜ λ°œμƒ

κ·Έλ ‡λ‹€λ©΄ μ—¬κΈ°μ„œ λ“œλŠ” ꢁ금증?!

κ³Όμ—°, ν•¨μˆ˜κ°€ μ•„λ‹Œ ifλ¬Έ, forλ¬Έ λ“±μ˜ μ½”λ“œ λΈ”λŸ­μ—μ„œλ„ yλŠ” 지역 μŠ€μ½”ν”„λ₯Ό κ°€μ§ˆκΉŒ?

μ•„λž˜μ˜ μ½”λ“œκ°€ μ–΄λ–»κ²Œ λ™μž‘ν•  지 5μ΄ˆλ™μ•ˆ 생각해보기!!!

μ½”λ“œ 1


// μ „μ—­ λ³€μˆ˜
var a = 1, b = 1;

if(true){
	// 지역 λ³€μˆ˜? μ „μ—­ λ³€μˆ˜?
    var a = 10;
 }
 
 function changeB(){
 	// 지역 λ³€μˆ˜
    var b = 10;
}

console.log(a);
changeB();
console.log(b);

μ½”λ“œ 2

// μ „μ—­ λ³€μˆ˜
let a = 1, b = 1;

if(true){
	// 지역 λ³€μˆ˜? μ „μ—­ λ³€μˆ˜?
    let a = 10;
 }
 
 function changeB(){
 	// 지역 λ³€μˆ˜
    let b = 10;
}

console.log(a);
changeB();
console.log(b);

정닡은?

  • μ½”λ“œ 1의 경우 10κ³Ό 1을 좜λ ₯
  • μ½”λ“œ 2의 경우 1κ³Ό 1을 좜λ ₯

μ΄λŸ¬ν•œ ν˜„μƒμ΄ μΌμ–΄λ‚˜λŠ” μ΄μœ λŠ” λ¬΄μ—‡μΌκΉŒ?

λ°”λ‘œ varκ³Ό let, const의 차이 λ•Œλ¬Έμ΄λ‹€

  • varλŠ” ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„(function level scope)
  • let, constλŠ” 블둝 레벨 μŠ€μ½”ν”„(block level scope)

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

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

  • ν•¨μˆ˜μ˜ μ •μ˜μ— μ˜ν•΄μ„œλ§Œ 지역 μŠ€μ½”ν”„κ°€ μƒμ„±λ˜λŠ” νŠΉμ„±
  • 즉, if, for, while, try/catch λ“±μ˜ μ½”λ“œ λΈ”λ‘μ—μ„œλŠ” μ „μ—­ μŠ€μ½”ν”„κ°€ 생성됨!

블둝 레벨 μŠ€μ½”ν”„λž€?

  • ν•¨μˆ˜ 뿐만 μ•„λ‹ˆλΌ, μ½”λ“œ 블둝 λ‚΄μ—μ„œλ„ 지역 μŠ€μ½”ν”„κ°€ μƒμ„±λ˜λŠ” νŠΉμ„±

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ›λž˜ ν•¨μˆ˜ 레벨 μŠ€μ½”ν”„λ₯Ό λ”°λ₯΄μ§€λ§Œ,
ES6에 μΆ”κ°€λœ let, const 덕뢄에 블둝 레벨 μŠ€μ½”ν”„λ₯Ό μ‚¬μš©ν•  수 있게 λ˜μ—ˆλ‹€.


κ·Έλ ‡λ‹€λ©΄, μš°λ¦¬λŠ” var을 μ¨μ•Όν• κΉŒ? let, constλ₯Ό μ¨μ•Όν• κΉŒ?

결둠적으둜, var의 μ‚¬μš©μ„ μ§€μ–‘ν•˜λŠ” 것 μ’‹λ‹€


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

  • ν•¨μˆ˜λ₯Ό 어디에 μ„ μ–Έν•˜μ˜€λŠ”μ§€μ— 따라 μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•œλ‹€
  • ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ ν˜ΈμΆœν•˜λŠ”μ§€λŠ” μ€‘μš”μΉ˜μ•Šκ³ , ν•¨μˆ˜λ₯Ό 어디에 μ„ μ–Έν–ˆλŠ”μ§€κ°€ μ€‘μš”ν•˜λ‹€

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λ ‰μ‹œμ»¬ μŠ€μ½”ν”„

μŠ€μ½”ν”„ 체인

μžλ°” μŠ€ν¬λ¦½νŠΈκ°€ λ³€μˆ˜ 값을 μ–»μœΌλ €κ³  ν•  λ•Œ, μŠ€μ½”ν”„ μ²΄μΈμ—μ„œ λ³€μˆ˜λ₯Ό 찾게 λœλ‹€.

μŠ€μ½”ν”„ μ²΄μΈμ΄λž€?

  • ν•΄λ‹Ή μ½”λ“œμ˜ μŠ€μ½”ν”„ μ•ˆμ— μžˆλŠ” λ³€μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 객체의 리슀트
  • 즉, μŠ€μ½”ν”„κ°€ κ³„μΈ΅μ μœΌλ‘œ μ—°κ²°λ˜λŠ” 것이라고 λ³Ό 수 μžˆλ‹€
  • 첫번째 κ°μ²΄μ—μ„œ λ³€μˆ˜λ₯Ό μ°Ύκ³ , μ—†λ‹€λ©΄ κ·Έ λ‹€μŒ κ°μ²΄μ—μ„œ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ°ΎλŠ” μ‹μœΌλ‘œ 진행

μ½”λ“œμ™€ 그림으둜 μ΄ν•΄ν•΄λ³΄μž!

// μŠ€μ½”ν”„ 체인

let x = "global x";
let y = "global y";

function outer(){
    let z = "outer's local z";

    console.log(x); // global x
    console.log(y); // global y
    console.log(z); // outer's local z

    function inner(){
        let x = "inner's local x";

        console.log(x); // inner's local x
        console.log(y); // global y
        console.log(z); // outer's local z
    }
    inner();
}

outer();

console.log(x); // global x

μŠ€μ½”ν”„ 체인은 물리적인 μ‹€μ²΄λ‘œ μ‘΄μž¬ν•œλ‹€

  • JS 엔진은 μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κΈ° μ•žμ„œ, μœ„ κ·Έλ¦Όκ³Ό 같은 λž™μ‹œμ»¬ ν™˜κ²½μ„ μ‹€μ œλ‘œ 생성
  • λ³€μˆ˜κ°€ μ„ μ–Έλ˜λ©΄ μ‹λ³„μžκ°€ λ ‰μ‹œμ»¬ ν™˜κ²½μ— key둜 λ“±λ‘λ˜κ³ , λ³€μˆ˜ 할당이 μΌμ–΄λ‚˜λ©΄ μ‹λ³„μžμ— ν•΄λ‹Ήν•˜λŠ” 값을 λ³€κ²½ν•œλ‹€

μ°Έκ³  μ‚¬μ΄νŠΈ

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

profile
인생은 용기의 양에 따라 μ€„μ–΄λ“€κ±°λ‚˜, λŠ˜μ–΄λ‚œλ‹€

0개의 λŒ“κΈ€