์ƒˆ์†Œ์‹

Languages/Java Script

[Js] ํด๋กœ์ € | ์™ธ๋ถ€ํ•จ์ˆ˜, ๋‚ด๋ถ€ํ•จ์ˆ˜

  • -
๋ฐ˜์‘ํ˜•

ํ•ด๋‹น ํฌ์ŠคํŒ…์€ "์ƒํ™œ์ฝ”๋”ฉ"์˜ ์ด๊ณ ์ž‰ ๋‹˜์˜ ๊ฐ•์˜๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์˜ฌ๋ฆฐ ๊ฒŒ์‹œ๊ธ€ ์ž…๋‹ˆ๋‹ค.

์ƒ์—…์ ์ธ ์šฉ๋„๊ฐ€ ์•„๋‹Œ, ๊ฐœ์ธ ๊ณต๋ถ€ ์ •๋ฆฌ ๋ชฉ์ ์œผ๋กœ ์˜ฌ๋ฆฌ๋Š” ๊ธ€์ž„์„ ๋ฏธ๋ฆฌ ์•Œ๋ฆฝ๋‹ˆ๋‹ค.

 

 

 

 


 

ํด๋กœ์ €

ํด๋กœ์ €(closure)๋Š” ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ๋งฅ๋ฝ(context)์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ๊ฐ€๋ฅดํ‚จ๋‹ค.

ํด๋กœ์ €๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•œ ๊ณ ๋‚œ์ด๋„์˜ ํ…Œํฌ๋‹‰์„ ๊ตฌ์‚ฌํ•˜๋Š”๋ฐ ํ•„์ˆ˜์ ์ธ ๊ฐœ๋…์œผ๋กœ ํ™œ์šฉ๋œ๋‹ค.

 

๋‚ด๋ถ€ํ•จ์ˆ˜

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋˜ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜์˜ ์˜ˆ์ œ๋ฅผ ๋ณด์ž. ๊ฒฐ๊ณผ๋Š” ๊ฒฝ๊ณ ์ฐฝ์— coding everybody๊ฐ€ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค.

<script>
    function outter(){
        function inner(){
            var title = 'coding everybody'; 
            alert(title);
        }
        inner();
    }
    outter();
</script>

 

์œ„ ์˜ˆ์ œ์—์„œ inner()๋Š” ๋‚ด๋ถ€ํ•จ์ˆ˜, outter()๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์ด๋‹ค.

์ฆ‰ inner()๋Š” var inner = function(){} ๊ณผ ๊ฐ™์€ ์˜๋ฏธ๋กœ, ์™ธ๋ถ€ํ•จ์ˆ˜outter()์˜ ์ง€์—ญ๋ณ€์ˆ˜๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉ๋˜์•ผ ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ, ํ•จ์ˆ˜ ๋ฐ–์— ์„ ์–ธํ•˜๊ฒŒ ๋˜๋ฉด ์‘์ง‘์„ฑ์ด ๋–จ์–ด์ง€๊ธฐ ๋–„๋ฌธ์ด๋‹ค.

๋‚ด๋ถ€ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์•„๋ž˜์˜ ์˜ˆ์ œ๋ฅผ ๋ณด์ž. ๊ฒฐ๊ณผ๋Š” coding everybody์ด๋‹ค.

<script>
    function outter(){
        var title = 'coding everybody';  
        function inner(){        
            alert(title);
        }
        inner();
    }
    outter();
</script>

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด, title์ด๋ผ๋Š” ๋ณ€์ˆ˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜(outter()ํ•จ์ˆ˜)์— ์ง€์—ญ๋ณ€์ˆ˜์ด๋‹ค.

 

inner()์ฆ‰ ๋‚ด๋ถ€ํ•จ์ˆ˜๋Š” title์ด๋ผ๋Š” ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์ง€๋งŒ, ์ž์‹ ์˜ ์™ธ๋ถ€ํ•จ์ˆ˜์ธ outter()์˜ ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผ์ด  ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— title์ด๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ์•Œ์•„๋ณด๊ณ , coding everybody๋ฅผ ์ถœ๋ ฅํ•˜๊ฒŒ ๋œ๋‹ค.

 

์ด๋ ‡๊ฒŒ ๋‚ด๋ถ€ํ•จ์ˆ˜์—์„œ ์™ธ๋ถ€ํ•จ์ˆ˜์— ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์„ ํด๋กœ์ € ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

 

์œ„์—์„œ ํด๋กœ์ €์˜ ๊ฐœ๋…์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€, ์™ธ๋ถ€ ํ•จ์ˆ˜์˜ ๊ฐœ๋…์„ ์•Œ์•„๋ณด์•˜๋‹ค.

ํฅ๋ฏธ๋กœ์šด ์‚ฌ์‹ค์€ ์™ธ๋ถ€ํ•จ์ˆ˜๊ฐ€ ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ์—๋„, ๋‚ด๋ถ€ ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ํ•จ์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ด๋‹ค.

 

 

ํด๋กœ์ €

 

ํด๋กœ์ €(closure)๋Š” ๋‚ด๋ถ€ํ•จ์ˆ˜์™€ ๋ฐ€์ ‘ํ•œ ๊ด€๊ณ„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์ฃผ์ œ๋‹ค. ๋‚ด๋ถ€ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์‹คํ–‰์ด ๋๋‚˜์„œ ์™ธ๋ถ€ํ•จ์ˆ˜๊ฐ€ ์†Œ๋ฉธ๋œ ์ดํ›„์—๋„ ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋‹ค.  ์ด๋Ÿฌํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ํด๋กœ์ €๋ผ๊ณ  ํ•œ๋‹ค.

 

์•„๋ž˜ ์˜ˆ์ œ๋Š” ์ด์ „์˜ ์˜ˆ์ œ๋ฅผ ์กฐ๊ธˆ ๋ณ€ํ˜•ํ•œ ๊ฒƒ์ด๋‹ค.

<script>
    function outter(){ // ์™ธ๋ถ€ํ•จ์ˆ˜
        var title = 'coding everybody';  
        return function(){// ๋‚ด๋ถ€ํ•จ์ˆ˜        
            alert(title);
        }
    }
    inner = outter();//๋‚ด๋ถ€ํ•จ์ˆ˜๋ฅผ inner์— ๋„ฃ์Œ 
    inner();
</script>

/*
returnํ–ˆ๋‹ค๋Š” ๊ฒƒ์€ ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ ๋˜์—ˆ๋‹ค๋Š” ๋œป์ด๋‹ค.

ํ•˜์ง€๋งŒ inner๋ฅผ ํ˜ธ์ถœํ•œ ์ˆœ๊ฐ„, outterํ•จ์ˆ˜๊ฐ€ ์ด๋ฏธ ์ข…๋ฃŒ๋˜์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์™ธ๋ถ€ํ•จ์ˆ˜์—์„œ ํŒŒ์ƒ๋œ ๋‚ด๋ถ€ ํ•จ์ˆ˜์—์„œ 

์™ธ๋ถ€ํ•จ์ˆ˜๋กœ ์ ‘๊ทผ์„ ์‹œ๋„ํ•˜๊ณ  ์žˆ๊ณ , ์ด ์ ‘๊ทผ์ด ์ด๋ฃจ์–ด์กŒ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
*/

 

๊ฒฐ๊ณผ๋Š” ๊ฒฝ๊ณ ์ฐฝ์œผ๋กœ coding everybody๋ฅผ ์ถœ๋ ฅํ•  ๊ฒƒ์ด๋‹ค.

 

์˜ˆ์ œ์˜ ์‹คํ–‰์ˆœ์„œ๋ฅผ ์ฃผ์˜๊นŠ๊ฒŒ ์‚ดํŽด๋ณด์ž. 8ํ–‰์—์„œ ํ•จ์ˆ˜ outter๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ ๊ฒฐ๊ณผ๊ฐ€ ๋ณ€์ˆ˜ inner์— ๋‹ด๊ธด๋‹ค.

๊ฒฐ๊ณผ๋Š” ์ด๋ฆ„์ด ์—†๋Š” ํ•จ์ˆ˜๋‹ค. ์‹คํ–‰์ด 9ํ–‰์œผ๋กœ ๋„˜์–ด์˜ค๋ฉด outter ํ•จ์ˆ˜๋Š” ์‹คํ–‰์ด ๋๋‚ฌ๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜๋Š” ์†Œ๋ฉธ๋˜๋Š” ๊ฒƒ์ด ์ž์—ฐ์Šค๋Ÿฝ๋‹ค. ํ•˜์ง€๋งŒ 9ํ–‰์—์„œ ํ•จ์ˆ˜ inner๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ coding everybody๊ฐ€ ์ถœ๋ ฅ๋œ ๊ฒƒ์€ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜ title์ด ์†Œ๋ฉธ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

ํด๋กœ์ €๋ž€ ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜์— ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ณ , ์™ธ๋ถ€ํ•จ์ˆ˜๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‚ด๋ถ€ํ•จ์ˆ˜๊ฐ€ ์†Œ๋ฉธ๋  ๋•Œ๊นŒ์ง€ ์†Œ๋ฉธ๋˜์ง€ ์•Š๋Š” ํŠน์„ฑ์„ ์˜๋ฏธํ•œ๋‹ค.

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ ์ฆ‰ 'ํด๋กœ์ €'๋Š” ๋„๋Œ€์ฒด ์–ด๋Š ๊ณณ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

์ด์ „์— ๋ฏธ๋ฆฌ ์•Œ์•„์•ผ ํ•  ๊ฒƒ์€, ํ”„๋ผ์ด๋น— ๋ณ€์ˆ˜(private variable : ๋น„๋ฐ€ ๋ณ€์ˆ˜)๋ผ๋Š” ๊ฒƒ์ธ๋ฐ, ์ด ๋ณ€์ˆ˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด๊ฐ€ ์ปค์ง€๋Š” ๊ณผ์ •์—์„œ ์–ด๋– ํ•œ ์ •๋ณด๊ฐ€ ์žˆ์„ ๋•Œ, ์ด ์ •๋ณด๋ฅผ ์•„๋ฌด๋‚˜ ์ˆ˜์ •ํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ˆ˜์ • ๋ฐฉ์ง€๋ฅผ ํ•˜๋Š” ๋ณ€์ˆ˜์ด๋‹ค.

 

ํด๋กœ์ €์˜ ๊ธฐ๋Šฅ์„ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด์กฐ๊ธˆ ๋” ๋ณต์žกํ•œ ์•„๋ž˜ ์˜ˆ์ œ๋ฅผ ์‚ดํŽด๋ณด์ž.

<!DOCTYPE html>
<html>
<head>
	<title>haha</title>
</head>
<body>
<script type="text/javascript">
	function factory_movie(title){//์™ธ๋ถ€ํ•จ์ˆ˜
		return {//return ๊ฐ’์œผ๋กœ ๊ฐ์ฒด๋ฅผ ์คŒ.
			get_title : function () {//๊ฐ์ฒด ์•ˆ์— ์žˆ๋Š” ํ•จ์ˆ˜, ์ฆ‰ ๋ฉ”์†Œ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.
			//์†Œ์†์ด ๊ฐ์ฒด์ผ๋ฟ, ๋‚ด๋ถ€ํ•จ์ˆ˜ ์ด๋ฏ€๋กœ ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜ ์ ‘๊ทผ ok
				return title;
			},
			set_title : function(_title){
				title = _title
			}
		}
	}
	ghost = factory_movie('Ghost in the shell'); //return๋’ค ๊ฐ์ฒด๊ฐ€ ๋ชจ๋‘ ๋“ค์–ด๊ฐ€๋Š” ๊ฒƒ.
	matrix =factory_movie('Matrix')
//์ฆ‰ factory_movie๋ฅผ ํ†ตํ•ด ์œ„์˜ ghost,matrix๋ผ๋Š” ๋‘๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“  ๊ฒƒ.

	alert(ghost.get_title()); //์—ฌ๊ธฐ์„œ๋Š” Ghost in the shell์ถœ๋ ฅ
	alert(matrix.get_title()); // ์—ฌ๊ธฐ์„œ๋Š” Matrix์ถœ๋ ฅ

	ghost.set_title('๊ฐ’ ๋ฐ”๊พธ๊ธฐ');//ghost๊ฐ์ฒด์˜ ๊ฐ’์ด "๊ฐ’ ๋ฐ”๊พธ๊ธฐ"๋กœ ๋ฐ”๋€œ

	alert(ghost.get_title()); //๋ฐ”๋€ ๊ฐ’์ธ '๊ฐ’ ๋ฐ”๊พธ๊ธฐ'์ถœ๋ ฅ
	alert(matrix.get_title());//์›๋ž˜ ๊ฐ’์ธ Matrix์ถœ๋ ฅ
</script>


</body>
</html>

์•„๋ž˜ ์˜ˆ์ œ๋Š” ํด๋กœ์ €๋ฅผ ์ด์šฉํ•ด์„œ ์˜ํ™”์˜ ์ œ๋ชฉ์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค.

์‹คํ–‰๊ฒฐ๊ณผ๋Š” Ghost in the shell -> Matrix -> ๊ฐ’ ๋ฐ”๊พธ๊ธฐ -> Matrix ์ด๋‹ค.

 

 

์œ„์˜ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด์„œ ์•Œ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

1. ํด๋กœ์ €๋Š” ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์œ„์˜ ์˜ˆ์ œ๋Š” ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์žˆ๋‹ค. ์ด ๊ฐ์ฒด๋Š” ๋ฉ”์†Œ๋“œ get_title๊ณผ set_title์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

์ด ๋ฉ”์†Œ๋“œ๋“ค์€ ์™ธ๋ถ€ํ•จ์ˆ˜์ธ factory_movie์˜ ์ธ์ž ๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋œ ์ง€์—ญ๋ณ€์ˆ˜ title์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

 

2. ๋™์ผํ•œ ์™ธ๋ถ€ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋งŒ๋“ค์–ด์ง„ ๋‚ด๋ถ€ํ•จ์ˆ˜๋‚˜ ๋ฉ”์†Œ๋“œ๋Š” ์™ธ๋ถ€ํ•จ์ˆ˜์˜ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

26ํ–‰์—์„œ ์‹คํ–‰๋œ set_title์€ ์™ธ๋ถ€ํ•จ์ˆ˜ factory_movie์˜ ์ง€์—ญ๋ณ€์ˆ˜ title์˜ ๊ฐ’์„ '๊ฐ’ ๋ฐ”๊พธ๊ธฐ'๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.

28ํ–‰์—์„œ ghost.get_title();์˜ ๊ฐ’์ด '๊ณต๊ฐ๊ธฐ๋™๋Œ€'์ธ ๊ฒƒ์€ set_title์™€ get_title ํ•จ์ˆ˜๊ฐ€ title์˜ ๊ฐ’์„ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋‹ค๋Š” ์˜๋ฏธ๋‹ค.

 

3. ๊ทธ๋Ÿฐ๋ฐ ๋˜‘๊ฐ™์€ ์™ธ๋ถ€ํ•จ์ˆ˜ factory_movie๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์žˆ๋Š” ghost์™€ matrix์˜ get_title์˜ ๊ฒฐ๊ณผ๋Š” ์„œ๋กœ ๊ฐ๊ฐ ๋‹ค๋ฅด๋‹ค.

๊ทธ๊ฒƒ์€ ์™ธ๋ถ€ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ์šด ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋กœ์ €๊ฐ€ ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์— ghost์™€ matrix๋Š” ์„œ๋กœ ์™„์ „ํžˆ ๋…๋ฆฝ๋œ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค.

 

4. factory_movie์˜ ์ง€์—ญ๋ณ€์ˆ˜ title์€ 9ํ–‰์—์„œ ์ •์˜๋œ ๊ฐ์ฒด์˜ ๋ฉ”์†Œ๋“œ์—์„œ๋งŒ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด๋‹ค.

์ด ๋ง์€ title์˜ ๊ฐ’์„ ์ฝ๊ณ  ์ˆ˜์ • ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ factory_movie ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด ๋ฟ์ด๋ผ๋Š” ์˜๋ฏธ๋‹ค. JavaScript๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Privateํ•œ ์†์„ฑ์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋ฐ, ํด๋กœ์ €์˜ ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ์ด์šฉํ•ด์„œ Privateํ•œ ์†์„ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ๋œ๋‹ค.

 

 

ํด๋กœ์ €๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ”„๋ผ์ด๋น— ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์•„์ฃผ ์ข‹์€ ๋ฉ”์นด๋‹ˆ์ฆ˜์ด๋‹ค.

์œ„ ์˜ˆ์‹œ๋กœ๋งŒ ๋ดค์„ ๋•Œ, title์ด๋ผ๋Š” ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ๋น„๋ฐ€๋ณ€์ˆ˜๋กœ ์ˆจ๊ฒจ๋†“๊ณ , ์ด ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” set_title๋กœ๋งŒ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ณ ,

get_title๋กœ๋งŒ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค๋ฉด ํ›จ์”ฌ ๋” ์•ˆ์ „ํ•ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

 

์ฐธ๊ณ 

Private ์†์„ฑ์€ ๊ฐ์ฒด์˜ ์™ธ๋ถ€์—์„œ๋Š” ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†๋Š” ์™ธ๋ถ€์— ๊ฐ์ถฐ์ง„ ์†์„ฑ์ด๋‚˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ฒด์˜ ๋‚ด๋ถ€์—์„œ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฐ’์ด ๋…ธ์ถœ๋จ์œผ๋กœ์„œ ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์™€ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ์–ธ์–ด ๋ฌธ๋ฒ• ์ฐจ์›์—์„œ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค.

 

์•„๋ž˜์˜ ์˜ˆ์ œ๋Š” ํด๋กœ์ €์™€ ๊ด€๋ จํ•ด์„œ ์ž์ฃผ ์–ธ๊ธ‰๋˜๋Š” ์˜ˆ์ œ๋‹ค. 

 

ํด๋กœ์ €๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ๊ฐ€์žฅ ๋งŽ์ด ์ผ์–ด๋‚˜๋Š” ์‹ค์ˆ˜์ด๋‹ค.

 

<!DOCTYPE html>
<html>
<head>
	<title>ํด๋กœ์ €</title>
</head>
<body>
<script type="text/javascript">
	var arr = [];
	for(var i =0; i <5; i++){
		arr[i] = function(){//ํ•จ์ˆ˜๋Š” i์˜ ๊ฐ’์„ ์•Œ ์ˆ˜ ์—†๋‹ค. 
			return i;
		}
	}
	for(var index in arr){
		console.log(arr[index]());
	}


</script>
</body>
</html>

 

ํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ์ปจํ…์ŠคํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜๊ฒ ์ง€๋งŒ ์œ„์˜ ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

5
5
5
5
5

์ด๋ ‡๊ฒŒ ๋˜๋Š” ์ด์œ ๋Š” arr[i]์— ๋“ค์–ด๊ฐ€๋Š” ํ•จ์ˆ˜๊ฐ€ i๋ผ๋Š” ๊ฐ’์„ ์•Œ ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋•Œ๋ฌธ์— arr[i]์—๋Š” ์ „์—ญ๋ณ€์ˆ˜ i์˜ ๊ฐ’์ด ๋“ค์–ด๊ฐ€ ์žˆ๊ณ ,

์ „์—ญ๋ณ€์ˆ˜ i๋Š” for๋ฌธ์„ ํ†ตํ•ด ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์ด ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— 4๋ฅผ ๋Œ๋ ค์ค€ ํ›„ i ++ ์ฆ‰ ๋ณ€์ˆ˜ i์ž์‹ ์€ 5๊ฐ€ ๋˜์–ด์žˆ๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— arr์•ˆ์— ๋“ค์–ด๊ฐ€ ์žˆ๋Š” ๊ฐ’์€ 5์ด๋‹ค. for๋ฌธ์ด ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„ ๊ฒƒ์ด๋‹ค.

 

 

์œ„์˜ ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค.

 

<!DOCTYPE html>
<html>
<head>
	<title>ํด๋กœ์ €</title>
</head>
<body>
<script type="text/javascript">
	var arr = [];
	for(var i =0; i <5; i++){
		arr[i] = function(id){ 
			return function(){
				return id;//์™ธ๋ถ€ํ•จ์ˆ˜์˜ id๋ฅผ ์ฐธ์กฐ, ๊ฐ’ ๋ณ€๊ฒฝ์ด ๊ฐ€๋Šฅํ•ด์ง.(id=i์ž„.)
			}
		}(i);
	}
	for(var index in arr){
		console.log(arr[index]());
	}


</script>
</body>
</html>

 

์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„, ๋‚ด๋ถ€ํ•จ์ˆ˜์—์„œ ์™ธ๋ถ€ ํ•จ์ˆ˜ i ๊ฐ’์„ id๋ผ๋Š” ๊ฐ’์œผ๋กœ ์ฐธ์กฐ ํ•  ์ˆ˜๊ฐ€ ์žˆ์–ด์„œ arr[]์•ˆ์— ์ˆœ์„œ๋Œ€๋กœ ๊ฐ’์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ฐ˜์‘ํ˜•
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.