Closure

โ€œA closure is the combination of a function and the lexical environment within which that function was declared.โ€

"ํด๋กœ์ €๋Š” ํ•จ์ˆ˜๊ฐ€ ์„ ์–ธ๋˜์—ˆ์„ ๋•Œ์˜ ๋ ‰์‹œ์ปฌ ํ™˜๊ฒฝ๊ณผ์˜ ์กฐํ•ฉ์ด๋‹ค"

ํด๋กœ์ €์— ๋Œ€ํ•ด MDN์€ ์œ„์™€ ๊ฐ™์ด ์ •์˜ ๋˜์–ด ์žˆ๋‹ค.

๋ฌด์Šจ ๋ง์ธ์ง€ ์ดํ•ด๊ฐ€ ๋˜๋Š”๊ฐ€??? ํ•„์ž๋Š” ์•„๋ฌด๋ฆฌ ์ƒ๊ฐํ•ด๋„ ์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์ด๋ ‡๊ฒŒ ์ดํ•ด ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋–ค๊ฐ€?

๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

์กฐ๊ธˆ์€ ์™€๋‹ฟ๋Š”๊ฐ€?? ํ•œ๋ฒˆ ์•„๋ž˜ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ํ•œ๋ฒˆ ์ดํ•ดํ•ด๋ณด์ž.

function Outer(){
    const str = 'hello'
    function Inner(){
        console.log(str)
    }
    Inner()
}
Outer() // hello

์œ„์— ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ์•Œ๊ฒ ์ง€๋งŒ, Outer์•ˆ์— ์žˆ๋Š” Inner ๋ฉ”์†Œ๋“œ๊ฐ€ Outer์˜ ๋ณ€์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค. ์ด์ œ ๊ฐ์ด ์ข€ ์žกํžˆ์ง€ ์•Š๋Š”๊ฐ€???

๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋งจ ์•„๋ž˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ฐธ๊ณ  ํ•˜์ž.! ๐Ÿ˜…

Next) Closure๋Š” Memory Leak์„ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค ?!

๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€๋ณ€์ˆ˜๋ฅผ ์žก๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GC๊ฐ€ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•œ๋‹ค. Javascript์—์„œ๋Š” ํ•ด๋‹น ๋ฌธ๋ฒ•์ด ์—†๋‹ค. ( Swift์—์„œ๋Š” weak self๋ฅผ ์‚ฌ์šฉ์„ ํ•ด์„œ ์ž‘์—…์„ ํ–ˆ์—ˆ๋‹ค.) ๊ทธ๋Ÿฌ๋ฉด Javascript GC์—์„œ ์–ด๋–ป๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žก๊ณ  ์žˆ๋Š”์ง€. ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ•ด์•ผ ํ•˜๋Š”์ง€ ๋‹ค์ŒํŽธ์—์„œ ๋ณด๋„๋ก ํ•˜์ž.!

๋‹ค์‹œ ์ฐพ์•„๋ณด๋‹ˆ javascript์—๋„ weak ref๊ฐ€ ์žˆ๊ธดํ•˜๋‹ค. ๋‹ค๋งŒ IE, safari์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค..

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakRef

์ฐธ๊ณ 

Last updated

Was this helpful?