πŸ”’Closure❓

πŸ§ ν•¨μˆ˜κ°€ 선언될 λ•Œμ˜ μ™ΈλΆ€ λ³€μˆ˜λ“€μ„ κΈ°μ–΅ν•˜λŠ” ν•¨μˆ˜πŸ’‘

λ‹€λ₯Έ ν•¨μˆ˜ 내뢀에 μ •μ˜λœ ν•¨μˆ˜(innerFunction)κ°€ μžˆλŠ” 경우
μ™ΈλΆ€ ν•¨μˆ˜(outerFunction)κ°€ 싀행을 μ™„λ£Œν•˜κ³  ν•΄λ‹Ή λ³€μˆ˜κ°€
ν•΄λ‹Ή ν•¨μˆ˜ μ™ΈλΆ€μ—μ„œ 더 이상 μ•‘μ„ΈμŠ€ ν•  수 μ—†λŠ” κ²½μš°μ—λ„
ν•΄λ‹Ή λ‚΄λΆ€ ν•¨μˆ˜λŠ” μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜ 및 λ²”μœ„μ— μ•‘μ„ΈμŠ€ ν•  수 있음

function outerFunction(outerVariable) {
  return function innerFunction(innerVariable) {
    console.log('Outer function: ' + outerVariable);
    console.log('Inner function: ' + innerVariable);
  }
}

const newFunction = outerFunction('outside');

newFunction('inside');

βœ… λ‚΄λΆ€ ν•¨μˆ˜λŠ” μ™ΈλΆ€ ν•¨μˆ˜κ°€ λλ‚˜λ„ μ™ΈλΆ€ λ³€μˆ˜μ— 계속 μ ‘κ·Όν•  수 μžˆλ‹€ ❗
πŸ‘‰ 이게 ν΄λ‘œμ € πŸ”₯

...

let a = 'a'; // βœ… μ „μ—­ λ³€μˆ˜

function functionB() {
  let c = 'c';
  console.log(a, b, c); // ❌ bλŠ” μ—¬κΈ°μ„œ μ •μ˜λœ 적 μ—†μŒ β†’ μ—λŸ¬
}

function functionA() {
  let b = 'b'; // βœ… functionA μ•ˆμ—μ„œλ§Œ μ“Έ 수 있음
  console.log(a, b); // ok, 좜λ ₯ : a b
  functionB(); // μ—¬κΈ°μ„œ functionB μ‹€ν–‰!
}

functionA();

πŸ™‹β€β™€οΈ μ™œ b is not defined μ—λŸ¬κ°€ λœ¨λƒλ©΄ ❓

functionB()λŠ” functionA() μ•ˆμ—
"μ •μ˜"된 게 μ•„λ‹ˆλΌ κ·Έλƒ₯ "호좜"만 된 κ±°μž„
πŸ‘‰ functionB의 μŠ€μ½”ν”„λŠ” 였직 자기 μžμ‹  + μ „μ—­ λ³€μˆ˜λ§Œ μ ‘κ·Ό κ°€λŠ₯β­•

bλŠ” functionA μ•ˆμ—μ„œλ§Œ μ“Έ 수 μžˆλŠ” μ§€μ—­ λ³€μˆ˜λΌ
functionBμ—μ„œλŠ” 보이지 μ•ŠμŒ

πŸ”‘ 핡심 포인트

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” "ν•¨μˆ˜λ₯Ό μ–΄λ””μ„œ ν˜ΈμΆœν–ˆλŠ”κ°€"κ°€ μ•„λ‹ˆλΌ,
"μ–΄λ””μ„œ μ •μ˜ν–ˆλŠ”κ°€"에 따라 μŠ€μ½”ν”„κ°€ κ²°μ •λ¨πŸ€©

πŸ‘‡

이걸 ν΄λ‘œμ €λ‘œ λ°”κΎΈλ €λ©΄ functionBλ₯Ό functionA μ•ˆμ— μ€‘μ²©ν•΄μ„œ μ •μ˜ν•΄μ£Όλ©΄λ¨
μ΄λ ‡κ²Œ ν•˜λ©΄ functionBλŠ” functionA의 μ§€μ—­ λ³€μˆ˜μΈ b도 μ ‘κ·Όν•  수 μžˆμŒπŸ™†β€β™€οΈ

let a = 'a'; // βœ… μ „μ—­ λ³€μˆ˜

function functionA() {
  let b = 'b'; // βœ… functionA의 μ§€μ—­ λ³€μˆ˜

  function functionB() {
    let c = 'c'; // βœ… functionB의 μ§€μ—­ λ³€μˆ˜
    console.log(a, b, c); // βœ… λͺ¨λ‘ μ ‘κ·Ό κ°€λŠ₯!
  }

  console.log(a, b); // 좜λ ₯: a b
  functionB(); // 좜λ ₯: a b c
}

functionA();
a b
a b c

λ‚΄λΆ€ν•¨μˆ˜λŠ” μ™ΈλΆ€ν•¨μˆ˜μ˜ 싀행이 λλ‚˜λ”λΌλ„
μ™ΈλΆ€ν•¨μˆ˜μ— μžˆλŠ” ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆκ²Œλ˜λŠ” κ²ƒπŸ˜Ž

profile
μ•ˆλ…•ν•˜μ„Έμš”! 퍼블리싱 & ν”„λ‘ νŠΈμ—”λ“œ 개발 곡뢀 λΈ”λ‘œκ·Έ μž…λ‹ˆλ‹€!

0개의 λŒ“κΈ€