๐Ÿ–Š๏ธ
Javascript-Advanced
  • Javascript ๊ณ ๊ธ‰
  • 1) Closure
    • Closure
    • Memory Leak
  • 2) Arrow Function
    • Class To Function ( babel )
    • Normal function vs Arrow Function
    • Class์—์„œ ์‚ฌ์šฉํ•˜์ง€๋งˆ!!!
    • ๊ทธ ์™ธ
  • 3) Hidden Class
    • Prototype Chainning
    • Hidden Class
    • Inline Cache
  • 4) setTimeout
    • setTimeout
  • 5) Nodejs
    • Execution-context
    • ๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ
    • Crypto
  • 6) Thinking
    • ์š”์ฒญ์ด ๋ฌดํ•œ๋Œ€๋กœ ๋“ค์–ด์˜ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
Powered by GitBook
On this page
  1. 1) Closure

Closure

PreviousJavascript ๊ณ ๊ธ‰NextMemory Leak

Last updated 4 years ago

Was this helpful?

CtrlK

Was this helpful?

โ€œ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

์ฐธ๊ณ 

  • https://poiemaweb.com/js-closure ( ํ•„์ž ๊ธ€๋ณด๋‹ค ๋งค์šฐ ์ž˜ ์„ค๋ช… ๋˜์–ด ์žˆ๋‹ค.)