μƒˆμ†Œμ‹

Languages/Java Script

[Js] ν•¨μˆ˜ | ν•¨μˆ˜μ˜ ν˜•μ‹ | ν•¨μˆ˜μ˜ μ •μ˜μ™€ 호좜 | μž…λ ₯κ³Ό 좜λ ₯

  • -
λ°˜μ‘ν˜•

 

ν•΄λ‹Ή ν¬μŠ€νŒ…μ€ "μƒν™œμ½”λ”©"의 μ΄κ³ μž‰ λ‹˜μ˜ κ°•μ˜λ₯Ό 기반으둜 올린 κ²Œμ‹œκΈ€ μž…λ‹ˆλ‹€.

상업적인 μš©λ„κ°€ μ•„λ‹Œ, 개인 곡뢀 정리 λͺ©μ μœΌλ‘œ μ˜¬λ¦¬λŠ” κΈ€μž„μ„ 미리 μ•Œλ¦½λ‹ˆλ‹€.

 

 


 

 

ν•¨μˆ˜

ν•¨μˆ˜(function)λž€ ν•˜λ‚˜μ˜ λ‘œμ§μ„ μž¬μ‹€ν–‰ ν•  수 μžˆλ„λ‘ ν•˜λŠ” κ²ƒμœΌλ‘œ μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ λ†’μ—¬μ€€λ‹€.

μˆ˜ν•™μ˜ ν•¨μˆ˜ κ°œλ…μ μœΌλ‘œ λ™μΌν•˜λ‹€.

 

 

ν•¨μˆ˜μ˜ ν˜•μ‹

ν•¨μˆ˜μ˜ ν˜•μ‹μ€ μ•„λž˜μ™€ κ°™λ‹€.

<script>
    function ν•¨μˆ˜λͺ…( [인자...[,인자]] ){
       μ½”λ“œ
       return λ°˜ν™˜κ°’
    }
</script>

 

ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³  ν˜ΈμΆœν•΄μ£ΌλŠ” 것은, λ³€μˆ˜μ˜ μ„ μ–Έκ³Ό μ‚¬μš©λ²•κ³Ό λΉ„μŠ·ν•˜λ‹€.

 

 

ν•¨μˆ˜μ˜ μ •μ˜μ™€ 호좜

ν•¨μˆ˜μ˜ 기본적인 ν‚€μ›Œλ“œλŠ” funcion이닀.

function 뒀에 ν•¨μˆ˜μ˜ 이름이 였고, μ†Œκ΄„ν˜Έκ°€ λ”°λΌμ˜¨λ‹€.

 

μ†Œκ΄„ν˜Έμ— μΈμžλΌλŠ” 값이 μ°¨λ‘€λ‘œ λ“€μ–΄μ˜€λŠ”λ° 이 값은 ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•  λ•Œ ν•¨μˆ˜μ˜ 둜직으둜 전달될 λ³€μˆ˜λ‹€.

μΈμžλŠ” μƒλž΅ ν•  수 μžˆλ‹€.

 

ν•¨μˆ˜λ₯Ό 호좜 ν–ˆμ„ λ•Œ μ‹€ν–‰ν•˜κ²Œ 될 뢀뢄이 μ€‘κ΄„ν˜Έ μ•ˆμͺ½μ— μ˜¨λ‹€.

 

 

λ‹€μŒ 예제λ₯Ό 보자.

이 ν•¨μˆ˜μ˜ 이름은 numbering이고, λ‚΄μš©μ€ 0λΆ€ν„° 9κΉŒμ§€λ₯Ό 화면에 좜λ ₯ν•œλ‹€.

<!DOCTYPE html>
<html>
<head>
	<title>haha</title>
</head>
<body>
<script type="text/javascript">
	function numbering(){
		i = 0;
		while(i<10){
			document.write(i);
			i +=1;
		}
	}

	numbering();


</script>

</body>
</html>

 

μœ„μ—μ„œ function으둜 ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜κ³ , ν•¨μˆ˜κ°€ λλ‚˜λ©΄ ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•΄λ³΄μ•˜λ‹€. 

즉, 제일 ν•˜λ‹¨ ꡬ문 μͺ½ numbering();μ΄λΌλŠ” μ΄λ¦„μ˜ ν•¨μˆ˜κ°€ 호좜된 것이닀.

 

κ²°κ³ΌλŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

 

ν•¨μˆ˜μ—μ„œ μ€‘μš”ν•œ 것은 "μž¬μ‚¬μš©μ„±"이고, 

이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” λͺ¨λ“  κ³³μ—μ„œ 변경이 맀우 μš©μ΄ν•˜κΈ° λ•Œλ¬Έμ— ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 맀우 νš¨μœ¨μ μ΄λ‹€.

 

λ§Œμ•½ μ΄λŸ¬ν•œ ν•¨μˆ˜κ°€ μ—†λ‹€λ©΄?

 

ν•¨μˆ˜κ°€ μ—†λ‹€λ©΄

0~9κΉŒμ§€ 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό 좜λ ₯ν•˜λŠ” 것을 예둜 λ“€μ–΄λ³΄μž.

 

λ§Œμ•½ ν”„λ‘œκ·Έλž¨μ„ 지 λ•Œ, 0~9κΉŒμ§€ 좜λ ₯ν•˜λŠ” μ½”λ“œλ₯Ό 총 5번 λ°˜λ³΅ν•΄μ„œ 좜λ ₯ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ 될까?

<script>
      var i = 0;
      while(i < 10){
          document.write(i);
          i += 1;
      }

      var i = 0;
      while(i < 10){
          document.write(i);
          i += 1;
      }

      var i = 0;
      while(i < 10){
          document.write(i);
          i += 1;
      }

      var i = 0;
      while(i < 10){
          document.write(i);
          i += 1;
      }

      var i = 0;
      while(i < 10){
          document.write(i);
          i += 1;
      }
</script>

 

λ°”λ‘œ μœ„μ™€κ°™μ΄ μ½”λ“œκ°€ 맀우 λ³΅μž‘ν•˜κ³ , κΈΈμ–΄μ§ˆ 것이닀.

 

그런데 μ΄λŸ¬ν•œ μž‘μ—…μ„ 1000번, 10000번 ν•΄μ•Ό ν•œλ‹€λ©΄? 

그리고 κ·Έ μž‘μ—…μ— μˆ˜μ •μ΄ λ“€μ–΄κ°„λ‹€λ©΄?

 

정말 λΉ„ 효율적이며, μ•”λ‹΄ν•  것이닀.

 

"ν•¨μˆ˜"λŠ” μ΄λŸ¬ν•œ 문제λ₯Ό ν˜„μ €νžˆ 쀄일 수 μžˆλ‹€.

 

 

μ•„λž˜ μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄μž.

<script>
      function numbering(){
          var i = 0;
          while(i < 10){
              document.write(i);
              i += 1;
          }   
      }

      numbering();
      numbering();
      numbering();
      numbering();
      numbering();
</script>

κ²°κ³ΌλŠ” κ°™μ§€λ§Œ λ‘œμ§μ€ 단 ν•œλ²ˆλ§Œ λ“±μž₯ν•˜λ―€λ‘œ,

μˆ˜μ •κ³Ό μž¬μ‚¬μš©μ΄ 맀우 κ°„νŽΈν•΄μ§„λ‹€.

 

 

μž…λ ₯κ³Ό 좜λ ₯

ν•¨μˆ˜μ˜ 핡심은 μž…λ ₯κ³Ό 좜λ ₯이닀.

μž…λ ₯된 값을 μ—°μ‚°ν•΄μ„œ 좜λ ₯ν•˜λŠ” 것이 ν•¨μˆ˜μ˜ 기본적인 역할이닀.

 

λ‹€μŒμ€ ν•¨μˆ˜μ—μ„œ μž…λ ₯κ³Ό 좜λ ₯의 역할을 ν•˜λŠ” ꡬ문듀에 λŒ€ν•œ μ„€λͺ…이닀.

 

 

  return  

ν•¨μˆ˜ λ‚΄μ—μ„œ μ‚¬μš©ν•œ return은 return 뒀에 λ”°λΌμ˜€λŠ” 값을 ν•¨μˆ˜μ˜ 결과둜 λ°˜ν™˜ν•œλ‹€. λ™μ‹œμ— ν•¨μˆ˜λ₯Ό μ’…λ£Œμ‹œν‚¨λ‹€.

 

μ•„λž˜ λ‚΄μš©μ„ 보자. κ²°κ³ΌλŠ” egoingκ³Ό k8805λ‹€.

<script>
      function get_member1(){
          return 'egoing';
      }

      function get_member2(){
          return 'k8805';
      }

      alert(get_member1());
      alert(get_member2());
</script>

get_member1와 get_member2λ₯Ό 좜λ ₯(alert)ν•œ κ²°κ³Όκ°€ 각각 egoingκ³Ό k8805인 μ΄μœ λŠ”

ν•¨μˆ˜ λ‚΄μ—μ„œ λ¬Έμžμ—΄ egoingκ³Ό k8805을 return을 ν•˜κΈ° λ•Œλ¬Έμ΄λ‹€.

 

return은 κ²°κ³Όλ₯Ό λ°˜ν™˜ν•˜λŠ” 것 외에 ν•¨μˆ˜λ₯Ό μ€‘μ§€μ‹œν‚€λŠ” 역할도 ν•œλ‹€.

 

λ‹€μŒ μ½”λ“œλ₯Ό 보자. κ²°κ³ΌλŠ” egoing이닀.

<script>
    function get_member(){
        return 'egoing';
        return 'k8805';
        return 'sorialgi';
    }
    alert(get_member());
</script>

return이 λ“±μž₯ν•˜μ˜€κΈ° λ•Œλ¬Έμ— 값을 λ°˜ν™˜ν•΄μ£Όκ³  μ’…λ£Œ μ‹œν‚€κΈ° λ•Œλ¬Έμ΄λ‹€.

즉, 이후에 return값듀은 λ¬΄μ‹œκ°€ λ˜μ–΄ μ‹€ν–‰λ˜μ§€ μ•ŠλŠ”λ‹€.

 

 

 

κ°„λ‹¨ν•˜κ²Œ "좜λ ₯ :return, μž…λ ₯ : 인자" μ΄λ ‡κ²Œ μƒκ°ν•˜λ©΄ λœλ‹€.

 

 

인자

 

μΈμžλž€?

인자(argument)λŠ” ν•¨μˆ˜λ‘œ μœ μž…λ˜λŠ” μž…λ ₯ 값을 μ˜λ―Έν•˜λŠ”λ°,

μ–΄λ–€ 값을 인자둜 μ „λ‹¬ν•˜λŠλƒμ— λ”°λΌμ„œ ν•¨μˆ˜κ°€ λ°˜ν™˜ν•˜λŠ” κ°’μ΄λ‚˜ λ©”μ†Œλ“œμ˜ λ™μž‘λ°©λ²•μ„ λ‹€λ₯΄κ²Œ ν•  수 μžˆλ‹€.

 

λ‹€μŒ 예λ₯Όλ³΄μž. κ²°κ³ΌλŠ” 1,2이닀.

<script>
      function get_argument(arg){
          return arg;
      }

      alert(get_argument(1));
      alert(get_argument(2));
</script>

 

alert(get_argument(1));의 get_argument(1)은 1ν–‰μ—μ„œ 3ν–‰ 사이에 μ •μ˜λœ ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” ꡬ문이닀.

alert(get_argument(1));의 1은 get_argument둜 1μ΄λΌλŠ” 값을 μ „λ‹¬ν•˜κ² λ‹€λŠ” μ˜λ―Έλ‹€.

 

이 λ•Œ 1행에 μ •μ˜λœ (arg) ꡬ문에 μ˜ν•΄μ„œ λ³€μˆ˜ arg의 κ°’μœΌλ‘œ 숫자 1이 ν•¨μˆ˜ μ•ˆμœΌλ‘œ μ „λ‹¬λœλ‹€.

 

이 λ³€μˆ˜ argλŠ” ν•¨μˆ˜ get_argument μ•ˆμ—μ„œλ§Œ μœ νš¨ν•˜λ‹€. 이 κ΄€κ³„λŠ” μ•„λž˜μ™€ κ°™λ‹€.

 

 

볡수의 인자

 

그럼 μ—¬λŸ¬κ°œμ˜ μž…λ ₯ 값을 λ°›κ³  μ‹Άλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ?

 

λ‹€μŒ 예제λ₯Ό 보자. κ²°κ³ΌλŠ” 30κ³Ό 50이닀.

<script>
      function get_arguments(arg1, arg2){
          return arg1 + arg2
      }

      alert(get_arguments(10, 20));
      alert(get_arguments(20, 30));
</script>

μœ„μ˜ 예제λ₯Ό 그림으둜 λ‚˜νƒ€λ‚΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

 

즉 ν•¨μˆ˜λ₯Ό 호좜 ν•  λ•Œ μ „λ‹¬ν•œ 인자 10κ³Ό 20은 ν•¨μˆ˜μ˜ μ„ μ–ΈλΆ€(1ν–‰)의 arg1, arg2에 μ°¨λ‘€λ‘œ ν• λ‹Ήλœλ‹€.

μ΄λ ‡κ²Œ μ „λ‹¬λœ 값은 ν•¨μˆ˜ λ‚΄λΆ€λ‘œ μ „λ‹¬λ˜μ„œ 더해진 후에 λ°˜ν™˜λœλ‹€.

 

return 값은 ν•˜λ‚˜λ§Œ κ°€μ§ˆ 수 μžˆλ‹€.

 

 

ν•¨μˆ˜λ₯Ό μ •μ˜ ν•˜λŠ” λ‹€λ₯Έ 방법

 

μžλ°”μŠ€ν¬λ¦½νŠΈλŠ” ν•¨μˆ˜λ₯Ό μ •μ˜ν•˜λŠ” 또 λ‹€λ₯Έ 방법을 μ œκ³΅ν•œλ‹€.

λ‹€μŒ 예제λ₯Ό 보자.

 

μ•„λž˜ 방법은 ν•¨μˆ˜λ₯Ό μ •μ˜ ν•˜λŠ” 또 λ‹€λ₯Έ 방법이닀.

<script>
    var numbering = function (){
        i = 0;
        while(i < 10){
            document.write(i);
            i += 1;
        }   
    }
    numbering();
</script>

 

μ΄λ ‡κ²Œ 되면 numberingμ΄λΌλŠ” λ³€μˆ˜μ•ˆμ— μ •μ˜ ν•œ ν•¨μˆ˜λ₯Ό λ„£λŠ” 것이고,

κ²°κ΅­ numberingλ³€μˆ˜λŠ” ν•¨μˆ˜λ₯Ό μ˜λ―Έν•˜κ²Œ λ˜μ–΄

numbering()으둜 ν•¨μˆ˜λ₯Ό 호좜 ν•  수 있게 λ˜λŠ” 것이닀.

 

μœ„μ—μ„œ μ‚¬μš©ν–ˆλ˜ 방법듀과 λͺ¨μ–‘은 λ‹€λ₯΄μ§€λ§Œ, μ˜λ―ΈλŠ” 거의 λ™μΌν•˜λ‹€.

 

μ•„λž˜λŠ” 읡λͺ…ν•¨μˆ˜μ΄λ‹€.

μ •μ˜μ™€ λ™μ‹œμ— ν˜ΈμΆœν•˜λŠ” 것이며, μΌνšŒμ„± ν•¨μˆ˜μ˜ 경우 μ‚¬μš©ν•œλ‹€!

 

 

ν•¨μˆ˜λŠ” μ½”λ“œμ˜ 재 ν™œμš©μ„±μ„ λ†’μ—¬μ€€λ‹€! λΌλŠ” 것을 κΈ°μ–΅ν•˜μž.

 

 

λ°˜μ‘ν˜•
Contents

ν¬μŠ€νŒ… μ£Όμ†Œλ₯Ό λ³΅μ‚¬ν–ˆμŠ΅λ‹ˆλ‹€

이 글이 도움이 λ˜μ—ˆλ‹€λ©΄ 곡감 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.