์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

[JavaScript]ํด๋กœ์ €ํ•จ์ˆ˜(Closure Function)

sukii 2024. 1. 4. 15:46
๋ฐ˜์‘ํ˜•

๐Ÿค”ํด๋กœ์ €ํ•จ์ˆ˜ : ๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ return ๋ช…๋ น์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด ํ•จ์ˆ˜ ์™ธ๋ถ€์—์„œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜

 

์‹ค์Šต์˜ˆ์ œ๐Ÿ‘ฉ‍๐Ÿ’ป

โ–ถ๏ธ๋‚ด๋ถ€ํ•จ์ˆ˜๋Š” ์›๋ž˜ ์„ ์–ธ๋œ ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•จ.

๊ทธ๋Ÿฌ๋‚˜ ํ•จ์ˆ˜๋ช…(inner)์œผ๋กœ ๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜(return)ํ•  ์ˆ˜ ์žˆ์Œ. 

๊ทธ๋Ÿฌ๋ฉด outer ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ–ˆ์„ ๋•Œ, ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜์–ด ํ˜ธ์ถœ๋จ.

์ด๋Ÿฌํ•œ outer ํ•จ์ˆ˜๋ฅผ ๋ณ€์ˆ˜์— ๋‹ด์•„, ๊ทธ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด closure ํ•จ์ˆ˜์ž„.

 

โ–ถ๏ธ์ด๋ฒˆ์—” ๋ฐ”๋กœ return ๋’ค์— ์ต๋ช…ํ•จ์ˆ˜์ธ ๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•จ.

๊ทธ๋ฆฌ๊ณ  "ํ™๊ธธ๋™"์ด๋ผ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง„  displayํ•จ์ˆ˜๋ฅผ  println์ด๋ผ๋Š” ๋ณ€์ˆ˜์— ์ €์žฅ.

println ๋ณ€์ˆ˜๋ช…์œผ๋กœ ํ˜ธ์ถœํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์‹คํ–‰๋จ.

โ–ถ๏ธ์œ„์—์„œ๋Š” println์ด๋ผ๋Š” ๋ณ€์ˆ˜์— displayํ•จ์ˆ˜๋ฅผ ๋‹ด์•„์„œ ํ˜ธ์ถœํ–ˆ๋Š”๋ฐ, ๊ทธ๋ƒฅ ๋ฐ”๋กœ displayํ•จ์ˆ˜๋กœ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Œ.

๊ทธ๋Ÿฌ๋‚˜ ์ด ๊ฒฝ์šฐ์—๋Š” ๋”ฑ ํ•œ ๋ฒˆ๋งŒ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•จ.

์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœํ•ด์•ผํ•˜๋ฉด, ์œ„ ๋ฐฉ๋ฒ•์ฒ˜๋Ÿผ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๊ธฐ!

 

 

์œ„ ์‹ค์Šต์˜ˆ์ œ ์ฝ”๋“œ ์ „์ฒดโฌ‡๏ธ

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
	<script type="text/javascript">
	function outer() {
		//๋‚ด๋ถ€ํ•จ์ˆ˜ ์„ ์–ธ
		function inner() {
			alert("๋‚ด๋ถ€ํ•จ์ˆ˜์˜ ๋ช…๋ น ์‹คํ–‰");
		}
		
		inner();//๋‚ด๋ถ€ํ•จ์ˆ˜๋Š” ์„ ์–ธ๋œ ํ•จ์ˆ˜์—์„œ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
		
		//ํ•จ์ˆ˜๋ช…์œผ๋กœ ๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
		return inner;
	}	
	
	//inner();//์—๋Ÿฌ ๋ฐœ์ƒ
	outer();
    
    
    
    
	//๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์•„ ๋ณ€์ˆ˜์— ์ €์žฅ 
	var closure=outer();
	closure();//๋ณ€์ˆ˜๋ช…์œผ๋กœ ๋‚ด๋ถ€ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฐ€๋Šฅ - ํด๋กœ์ €ํ•จ์ˆ˜

		
	function display(name) {
		//๋‚ด๋ถ€ํ•จ์ˆ˜๋กœ ์ต๋ช…ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•˜์—ฌ ๋ฐ˜ํ™˜
		return function() {
			alert(name+"๋‹˜, ์•ˆ๋…•ํ•˜์„ธ์š”.");
		}
	}	
	
	
	var println=display("ํ™๊ธธ๋™");
	println();


	//๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜๋ฐ›์•„ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜์ง€ ์•Š๊ณ  ์ง์ ‘ ํ˜ธ์ถœ - ํ•œ๋ฒˆ๋งŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
	display("ํ™๊ธธ๋™")();
	display("์ž„๊บฝ์ •")();
	</script>
</body>
</html>

 

๋ฐ˜์‘ํ˜•