Lexical scope and Closure

Paul KangΒ·2021λ…„ 10μ›” 2일
0

ν΄λ‘œμ €

πŸ“š ν΄λ‘œμ €μ— λŒ€ν•΄ μ•Œμ•„λ΄…μ‹œλ‹€.

은연쀑에 μ‚¬μš©ν–ˆμ„ ν΄λ‘œμ €. μ œλŒ€λ‘œ μ •λ¦¬ν•΄λ΄…μ‹œλ‹€.

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œλŠ” λ‚΄λΆ€ν•¨μˆ˜μ™€ μ™ΈλΆ€ν•¨μˆ˜κ°€ μ‘΄μž¬ν•©λ‹ˆλ‹€. λ‚΄λΆ€ν•¨μˆ˜λŠ” μ™ΈλΆ€ν•¨μˆ˜μ˜ μ§€μ—­λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.
그리고 μ™ΈλΆ€ν•¨μˆ˜κ°€ μ†Œλ©Έν•œ 후에도 μ™ΈλΆ€ν•¨μˆ˜μ˜ μ§€μ—­λ³€μˆ˜μ— μ ‘κ·Ό κ°€λŠ₯ν•©λ‹ˆλ‹€.
이 νŠΉμ„±μ„ μ΄μš©ν•œ 것이 closure μž…λ‹ˆλ‹€.

λ§λ‘œλŠ” μ „λΆ€ μ΄ν•΄ν•˜κΈ° νž˜λ“€μ£ ? 😭

그럼 μ˜ˆμ‹œλ₯Ό λ³΄κ² μŠ΅λ‹ˆλ‹€.

function outer(outerValue) {
  return function inner(innerValue) {
    console.log(`outer value : ${outerValue}`);
    console.log(`inner value : ${innerValue}`);
  }
}

const inner = outer("겉은 λ°”μ‚­");

inner("속은 촉촉");

// outer value : 겉은 λ°”μ‚­
// inner value : 속은 촉촉

κ²°κ³ΌλŠ” ?

outer value : 겉은 λ°”μ‚­
inner value : 속은 촉촉

μ™ΈλΆ€ ν•¨μˆ˜μ—μ„œ μ„ μ–Έλœ outerValueλΌλŠ” μ§€μ—­λ³€μˆ˜λ₯Ό inner ν•¨μˆ˜μ—μ„œ κΈ°μ–΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€!

μ—¬κΈ°μ„œ κΆκΈˆν•œ 점은, inner ν•¨μˆ˜λŠ” outerValue 값인 "겉은 λ°”μ‚­" μ΄λΌλŠ” 값을 μ–΄λ–»κ²Œ κΈ°μ–΅ν•˜λŠ” κ±ΈκΉŒμš”?

이에 λŒ€ν•΄μ„  λ ‰μ‹œμ»¬ μŠ€μ½”ν”„μ— λŒ€ν•΄ μ΄ν•΄ν•˜κ³  μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€.

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„μ™€ 유효 λ²”μœ„

μœ„μ˜ μƒν™©μ—μ„œ ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©΄ μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½κ³Ό λ‚΄λΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ΄λΌλŠ” κ³ μœ ν•œ 유효 λ²”μœ„λ₯Ό κ°–μŠ΅λ‹ˆλ‹€. 그리고 이λ₯Ό λ©”λͺ¨λ¦¬μ— μ €μž₯ν•©λ‹ˆλ‹€.

μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ λ§κ·ΈλŒ€λ‘œ ν•¨μˆ˜ λ°”κΉ₯의 λ²”μœ„λ₯Ό μ°Έμ‘°ν•˜κ³ , λ‚΄λΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ€ ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ μ‚¬μš©λœ μΈμžλ‚˜ μ§€μ—­λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•©λ‹ˆλ‹€.

μ—¬κΈ°μ„œ μ€‘μš”ν•œμ !

ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œ λ³€μˆ˜λ₯Ό μ‚¬μš©ν•  λ•ŒλŠ” 일단 λ‚΄λΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μ„ νƒμƒ‰ν•œ ν›„, μ°ΎλŠ” λ³€μˆ˜κ°€ μ—†λ‹€λ©΄ μ™ΈλΆ€ λ ‰μ‹œμ»¬ ν™˜κ²½μœΌλ‘œ 이동해 λ³€μˆ˜λ₯Ό μ°ΎμŠ΅λ‹ˆλ‹€. 이것이 closureμž…λ‹ˆλ‹€. (μ•žμ„œ μ–˜κΈ° ν–ˆλ“―μ΄)

그럼 μ–΄λ–»κ²Œ "겉은 λ°”μ‚­"이 좜λ ₯λ˜μ—ˆλŠ”μ§€ μ–΄λŠ 정도 감이 μ˜€μ‹œλ‚˜μš”?

κ·Έλ ‡λ‹€λ©΄ ν΄λ‘œμ €λ₯Ό 톡해 얻을 수 μžˆλŠ” κ°€μž₯ 큰 이점?

ν•¨μˆ˜ μ’…λ£Œ 후에도 사라지지 μ•ŠλŠ” 지역 λ³€μˆ˜λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€!
더 λ‚˜μ•„κ°€μ„œ 객제 지ν–₯의 μΊ‘μŠν™”μ˜ κΈ°λŠ₯을 ν΄λ‘œμ €λ₯Ό 톡해 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

profile
뭐든 κΈ°λ‘ν•˜λ©΄ μžμ‚°!

0개의 λŒ“κΈ€