[JavaScript]ํด๋ก์ ํจ์(Closure Function)
๐คํด๋ก์ ํจ์ : ๋ด๋ถํจ์๋ฅผ 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>