πŸ“’ JavaScript

"ν΄λ‘œμ €κ°€ λ­μ—μš”?" λ₯Ό λ‹΅ν•˜μ§€ λͺ»ν–ˆλ‹€.

Tamii 2022. 6. 23. 09:02
λ°˜μ‘ν˜•

ν΄λ‘œμ €κ°€ λ­μ—μš”?

μ–΄λ–€ ν•¨μˆ˜μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” λ‚΄λΆ€ ν•¨μˆ˜λ₯Ό μ™ΈλΆ€λ‘œ 전달할 경우 ν•¨μˆ˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μ’…λ£Œλœ 후에도 ν•΄λ‹Ή λ³€μˆ˜κ°€ 사라지지 μ•ŠλŠ”ν˜„μƒμ„ λ§ν•©λ‹ˆλ‹€.

 

 

 

 

ν΄λ‘œμ €

 

μ–΄λ–€ ν•¨μˆ˜μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” λ‚΄λΆ€ ν•¨μˆ˜λ₯Ό μ™ΈλΆ€λ‘œ 전달할 경우,

(μ™ΈλΆ€)ν•¨μˆ˜μ˜ μ‹€ν–‰ μ»¨ν…μŠ€νŠΈκ°€ μ’…λ£Œλœ 후에도 ν•΄λ‹Ή λ³€μˆ˜κ°€ 사라지지 μ•ŠλŠ” ν˜„μƒ 

 

var outer = function () {
	var a= 1;
    var inner= function() {
    	return ++a;
    }
    
    return inner; // - 1. 값이 μ•„λ‹Œ ν•¨μˆ˜ 자체λ₯Ό 전달
    
}

var outer2 = outer(); // - 2. fooν•¨μˆ˜μ˜ μ‹€ν–‰μ»¨ν…μŠ€νŠΈ μ’…λ£Œ
console.log(outer2()); // 2 - 3. μ•žμ„œ λ°˜ν™˜ 된 innerκ°€ 싀행됨
console.log(outer2()); // 3
  1. fooλŠ” ν•¨μˆ˜μ˜ μ‹€ν–‰ κ²°κ³Όκ°€ μ•„λ‹Œ ν•¨μˆ˜ 자체λ₯Ό λ°˜ν™˜ν•¨ (inner)
  2. fooν•¨μˆ˜μ˜ μ‹€ν–‰μ»¨ν…μŠ€νŠΈκ°€ μ’…λ£Œλ˜μ—ˆμŒμ—λ„
  3. μ•žμ„œ λ°˜ν™˜λœ innerν•¨μˆ˜κ°€ 싀행됨 

 

κ·Έ μ΄μœ λŠ”?

innerν•¨μˆ˜λŠ” λ‚΄λΆ€μ—μ„œ μ„ μ–Έλ˜μ—ˆμŒ : outerν•¨μˆ˜μ˜λ ‰μ‹œμ»¬ ν™˜κ²½μ— λ‹΄κΉ€

μŠ€μ½”ν”„ 체이닝에 따라 outerμ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜ a에 μ ‘κ·Όν•˜κ²Œ 됨

 

근데 μ–΄λ–»κ²Œ μ ‘κ·Όν•˜λŠ” κ±°μ—μš”?

가비지 μ»¬λ ‰ν„°μ˜ λ™μž‘ 방식 λ•Œλ¬Έμž…λ‹ˆλ‹€.

가비지 μ»¬λ ‰ν„°λŠ” μ–΄λ–€ 값을 μ°Έμ‘°ν•˜λŠ” λ³€μˆ˜κ°€ ν•˜λ‚˜λΌλ„ 있으면 κ·Έ 값은 μˆ˜μ§‘ λŒ€μƒμ— ν¬ν•¨ν•˜μ§€ μ•ŠμŒ 

 

λ”°λΌμ„œ outer ν•¨μˆ˜μ˜ 싀행이 μ’…λ£Œλ˜λ”λΌλ„ λ‚΄λΆ€ ν•¨μˆ˜μΈ inner 둜 인해 aλ₯Ό ν˜ΈμΆœν•  κ°€λŠ₯성이 μž‡κ³ 

가비지 μ»¬λ ›ν„°λŠ” 이 값을 μˆ˜μ§‘ν•˜μ§€ μ•ŠλŠ”λ‹€

 

 

 

ν΄λ‘œμ €μ˜ λ‹€μ–‘ν•œ μ •μ˜

 

ν•¨μˆ˜μ—μ„œ μ„ μ–Έν•œ λ³€μˆ˜λ₯Ό  λ‚΄λΆ€ ν•¨μˆ˜μ—μ„œ μ‚¬μš©ν•  경우 λ°œμƒν•˜λŠ” ν˜„μƒμœΌλ‘œ,

μ™ΈλΆ€ ν•¨μˆ˜μ˜ 생λͺ…μ£ΌκΈ°κ°€ μ’…λ£Œλ˜λ”λΌλ„, μŠ€μ½”ν”„ 체인에 μ˜ν•΄ ν•΄λ‹Ή λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

ν•¨μˆ˜λ₯Ό μ„ μ–Έν•  λ•Œ λ§Œλ“€μ–΄μ§€λŠ” μœ νš¨λ²”μœ„κ°€ 사라진 후에도 ν˜ΈμΆœν•  수 μžˆλŠ” ν•¨μˆ˜ - < μžλ°”μŠ€ν¬λ¦½νŠΈ λ‹Œμž λΉ„κΈ‰> , μ‘΄λ ˆμ‹

이미 생λͺ…μ£ΌκΈ°κ°€ λλ‚œ μ™ΈλΆ€ ν•¨μˆ˜μ˜ λ³€μˆ˜λ₯Ό μ°Έμ‘°ν•˜λŠ” ν•¨μˆ˜ - < μΈμ‚¬μ΄λ“œ μžλ°”μŠ€ν¬λ¦½νŠΈ >, μ†‘ν˜•μ£Ό κ³ ν˜„μ€€

μžμ‹ μ΄ 생성될 λ•Œμ˜ μŠ€μ½”ν”„μ—μ„œ μ•Œ 수 μžˆμ—ˆλ˜ λ³€μˆ˜λ“€ 쀑 μ–Έμ  κ°€ μžμ‹ μ΄ 싀행될 λ•Œ μ‚¬μš©ν•  λ³€μˆ˜λ§Œμ„ κΈ°μ–΅ν•˜μ—¬ μœ μ§€μ‹œν‚€λŠ” ν•¨μˆ˜ - < ν•¨μˆ˜ν˜• μžλ°”μŠ€ν¬λ¦½νŠΈ ν”„λ‘œκ·Έλž˜λ° >, μœ μΈλ™

 

 

 

 

 

-  ν•΄λ‹Ή λ‚΄μš©μ€ μ½”μ–΄ μžλ°”μŠ€ν¬λ¦½νŠΈ λ‚΄μš©μ„ μ°Έμ‘°ν–ˆμŠ΅λ‹ˆλ‹€. -