Closure, ํด๋กœ์ €

๐Ÿ˜‚ ํ•ด๋‹น ์Šค์ฝ”ํ”„(์˜์—ญ)์—์„œ, ์ž์‹ ์ด ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ฅผ ํด๋กœ์ €๋ผํ•˜๋Š”๊ฒƒ ๊ฐ™๋”๋ผ.

Closure(ํด๋กœ์ €)

Scope๋Š” ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๊ฐ€ ์•„๋‹ˆ๋ผ, ์„ ์–ธํ–ˆ์„ ๋•Œ ์ •ํ•ด์ง„๋‹ค๊ณ  ํ–ˆ์—ˆ์Œ.

๋ ‰์‹œ์ปฌ ์Šค์ฝ”ํ•‘

์Šค์ฝ”ํ”„๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๊ฐ€ ์•„๋‹ˆ๋ผ, ํ•จ์ˆ˜๋ฅผ ์–ด๋””์— ์„ ์–ธํ–ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๊ฒฐ์ •๋œ๋‹ค.

// 1๋ฒˆ
function outerFunc() {
  var x = 10
  var innerFunc = function() {
    console.log(x)
  }
  innerFunc()
}
// innerFunc๋Š” ํ•จ์ˆ˜์˜ ์œ„์น˜๊ฐ€ outerFunc์˜ ๋‚ด๋ถ€์ด๊ธฐ ๋•Œ๋ฌธ์—, outerFunc์˜ ๋ณ€์ˆ˜ x๋ฅผ ํด๋กœ์ €๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜์žˆ์œผ๋ฉฐ, innerFunc์ž์‹ ์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค.
outerFunc()

ํด๋กœ์ €์˜ ์žฅ์ 

  1. ์ƒํƒœ์œ ์ง€ : ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๊ธฐ์–ตํ•˜๊ณ , ๋ณ€๊ฒฝ๋œ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  2. ์ „์—ญ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ ์–ต์ œ : ์ „์—ญ๋ณ€์ˆ˜๊ฐ€ ์•„๋‹Œ, ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ํด๋กœ์ €๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์—ฌ, ๋‹ค์–‘ํ•œ ์˜ค๋ฅ˜๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์˜ˆ์ œ


var box = document.querySelector('.box')
var toggleBtn = document.querySelector('.toggle')

var toggle = (function() {
  var color = false
  // โ‘  ํด๋กœ์ €๋ฅผ ๋ฐ˜ํ™˜
  return function() {
    box.style.background = color ? 'red' : 'blue'
    // โ‘ข ์ƒํƒœ ๋ณ€๊ฒฝ
    color = !color
  }
})()

// ์ฆ‰์‹œ์‹คํ–‰ํ•จ์ˆ˜๋กœ, ์˜๊ตฌ์ ์œผ๋กœ toggle ์ด๋ฒคํŠธ๋Š” return ๋œ ํ•จ์ˆ˜์ž„.
// ํ•˜์ง€๋งŒ, closure ์†์„ฑ์ƒ, color๋ผ๋Š” ๋ณ€์ˆ˜๋Š” ์กด์žฌํ•˜๊ณ  ์žˆ์Œ.

// โ‘ก ์ด๋ฒคํŠธ ํ”„๋กœํผํ‹ฐ์— ํด๋กœ์ €๋ฅผ ํ• ๋‹น
// console.dir(toggle) // closure๋กœ color์˜ ๊ฐ’ ๊ฐ–๊ณ ์žˆ์Œ
toggleBtn.onclick = toggle

์ถœ์ฒ˜ : ํด๋กœ์ €, ์Šค์ฝ”ํ”„ ์„œ์ง„๊ทœ๋‹˜ ๋ธ”๋กœ๊ทธ


@SangMin
๐Ÿ‘† H'e'story

๐Ÿš€GitHub