였늘 배운 λ‚΄μš©μ€

  1. μŠ€μ½”ν”„
  2. ν΄λ‘œμ €

핡심 λ‚΄μš©λ§Œ 정리해 보렀고 ν•œλ‹€.


1. μŠ€μ½”ν”„

  • λ³€μˆ˜μ˜ μœ νš¨λ²”μœ„λ‘œ μ‚¬μš©λœλ‹€.
  • λ²”μœ„κ°€ μ€‘κ΄„ν˜Έ(블둝) λ˜λŠ” ν•¨μˆ˜μ— μ˜ν•΄ λ‚˜λˆ„μ–΄μ§€κ³ , κ·Έ λ²”μœ„λ₯Ό μŠ€μ½”ν”„λΌκ³  λΆ€λ₯Έλ‹€.

μ•ˆμͺ½ μŠ€μ½”ν”„, λ°”κΉ₯ μŠ€μ½”ν”„ ꡬ뢄

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

  • κ°€μž₯ λ°”κΉ₯ μŠ€μ½”ν”„λŠ” μ „μ—­ μŠ€μ½”ν”„λ‘œ 뢈림
  • μ•ˆμͺ½ μŠ€μ½”ν”„, 즉 μ „μ—­ μŠ€μ½”ν”„κ°€ μ•„λ‹Œ 것은 μ „λΆ€ 지역 μŠ€μ½”ν”„λ‘œ 뢈림

μŠ€μ½”ν”„ κ·œμΉ™

  • μŠ€μ½”ν”„λŠ” 쀑첩이 κ°€λŠ₯ν•˜λ‹€.
  • 지역 λ³€μˆ˜λŠ” μ „μ—­ λ³€μˆ˜λ³΄λ‹€ 더 높은 μš°μ„ μˆœμœ„λ₯Ό 가진닀.
  • μ•ˆμͺ½ μŠ€μ½”ν”„μ—μ„œ λ°”κΉ₯ μŠ€μ½”ν”„μ— μžˆλŠ” λ³€μˆ˜μ— 접근이 κ°€λŠ₯
  • λ°˜λŒ€λ‘œ λ°”κΉ₯ μŠ€μ½”ν”„μ—μ„œλŠ” μ•ˆμͺ½ μŠ€μ½”ν”„μ— μžˆλŠ” λ³€μˆ˜μ— 접근이 λΆˆκ°€λŠ₯

μŠ€μ½”ν”„ μ’…λ₯˜

  1. 블둝 μŠ€μ½”ν”„ : μ€‘κ΄„ν˜Έ κΈ°μ€€ λ²”μœ„ (μ€‘κ΄„ν˜Έ μ•ˆμ˜ λ²”μœ„)

    ν•¨μˆ˜μ— fucntion ν‚€μ›Œλ“œ 없이 μ‚¬μš©ν•˜λ©΄ 블둝 μŠ€μ½”ν”„
    (ν™”μ‚΄ν‘œ ν•¨μˆ˜ 포함)

  2. ν•¨μˆ˜ μŠ€μ½”ν”„ : ν•¨μˆ˜λ‘œ λ‘˜λŸ¬μ‹Ό λ²”μœ„

    ν•¨μˆ˜μ— function ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜λ©΄ ν•¨μˆ˜ μŠ€μ½”ν”„
    (ν™”μ‚΄ν‘œ ν•¨μˆ˜ 포함)

πŸ” μŠ€μ½”ν”„ 좔가적인 λΆ€λΆ„

  • var ν‚€μ›Œλ“œλŠ” 블둝 μŠ€μ½”ν”„λ₯Ό λ¬΄μ‹œν•œλ‹€.

    for(var i = 0; i < 5; i++){
    }
    console.log( i ) => 블둝 μŠ€μ½”ν”„ λ°–μ—μ„œ 싀행이 λœλ‹€.

  • 단, ν™”μ‚΄ν‘œ ν•¨μˆ˜μ˜ 블둝 μŠ€μ½”ν”„λŠ” λ¬΄μ‹œν•˜μ§€ μ•ŠλŠ”λ‹€.

  • var ν‚€μ›Œλ“œλ‘œ μΈν•œ μœ„ν—˜μ„±λ„ 있기 λ•Œλ¬Έμ—,
    μ•ˆμ „ν•˜κ²Œ μ‚¬μš©μ΄ κ°€λŠ₯ν•œ let , const λ₯Ό μ΄μš©ν•΄μ•Ό 함


2. ν΄λ‘œμ €

  • ν•¨μˆ˜μ™€ ν•¨μˆ˜κ°€ μ„ μ–Έλœ μ–΄νœ˜μ (lexical) ν™˜κ²½μ˜ μ‘°ν•©
  • μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— μ ‘κ·Όν•  수 μžˆλŠ” λ‚΄λΆ€ ν•¨μˆ˜
  • μŠ€μ½”ν”„ 체인이라고도 뢈림

ν΄λ‘œμ €μ˜ 3가지 μŠ€μ½”ν”„ 체인

  1. ν΄λ‘œμ € μžμ‹ μ— λŒ€ν•œ μ ‘κ·Ό(μžμ‹ μ˜ λΈ”λŸ­λ‚΄μ— μ •μ˜λœ λ³€μˆ˜)
  2. μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜μ— λŒ€ν•œ μ ‘κ·Ό
  3. μ „μ—­ λ³€μˆ˜μ— λŒ€ν•œ μ ‘κ·Ό

πŸ”” ν΄λ‘œλ²„ μ˜ˆμ‹œ

function outerFn() {
const outerFnVar = 'outer ν•¨μˆ˜ λ‚΄μ˜ λ³€μˆ˜';
const innerFn = function () {
return (
'innerFn은 ' + outerFnVar + '와 ' + globalVar + '에 μ ‘κ·Όν•  수 μžˆμŠ΅λ‹ˆλ‹€.');
};
return innerFn;
}
// innerFn ν•¨μˆ˜μ—μ„œλŠ” λ¬Έμžμ—΄μ„ 리턴 / μ–΄λ””λ‘œ ? outerFn ν•¨μˆ˜λ‘œ
// outerFn ν•¨μˆ˜μ—μ„œλŠ” innerFn ν•¨μˆ˜λ₯Ό 리턴 / μ–΄λ””λ‘œ ? μ™ΈλΆ€λ‘œ
const innerFnOnGlobal = outerFn();
// outerFn ν•¨μˆ˜ μ‹€ν–‰κ²°κ³Όλ₯Ό innerFnOnGlobal에 지정
const message = innerFnOnGlobal();
// innerFnOnGlobal()μ—λŠ” innerFn ν•¨μˆ˜μ˜ μ£Όμ†Œκ°’μ΄ λ“€μ–΄κ°€ μžˆλ‹€. κ·Έκ±Έ message에 지정해주면 innerFn ν•¨μˆ˜μ˜ 리턴 값이 듀어감
console.log(message);

ν΄λ‘œμ € ꡬ뢄


πŸ’¬ 이해가 μ™„λ²½ν•˜κ²Œ λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ λ³΅μŠ΅ν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•˜λŠ” 점

  1. μœ„μ˜ μ˜ˆμ‹œμ—λ§Œ 이해가 된 것 κ°™μ•„μ„œ ꡬ글링을 ν†΅ν•΄μ„œ ν΄λ‘œμ € μ˜ˆμ‹œλ₯Ό 더 많이 보고 λ”₯ν•˜κ²Œ 이해λ₯Ό ν•΄μ•Ό ν•  것 κ°™λ‹€.

  2. μœ„μ˜ μ˜ˆμ‹œλ₯Ό λ³Ό λ•Œ outerFn ν•¨μˆ˜μ— μ–΄λ– ν•œ 값이 μžˆλ‹€λ©΄
    ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ outerFn() 값이 μ–΄λ–»κ²Œ 될 지 μ˜ˆμƒμ΄ μ•ˆλœλ‹€.
    μ•„λ§ˆ 1번의 이유인 것 κ°™λ‹€.

ν΄λ‘œμ € μ°Έκ³  λ¬Έμ„œ 링크 :

http://clipsoft.co.kr/wp/blog/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%81%B4%EB%A1%9C%EC%A0%80closure/

profile
ν”„λ‘ νŠΈμ—”λ“œ 개발 곡뢀쀑

0개의 λŒ“κΈ€