41기 개발자과정

20210930 함수

segment 2021. 9. 30. 17:24

함수란? 

 

메모리에 코드를 저장 할 수 있는 수단

function이라는 키워드를 사용하여 선언이 가능하다.

함수는 선언 후에 호출이 되어야 저장된 코드가 실행된다.

함수에는 일반함수 익명함수 존재한다

 

함수의 선언

- function를 활용하여 선언한다.

- 일반 함수 구문 : function 함수명 (){}

- 익명 함수 구문 : function(){}

- 익명 함수는 변수에 대입이 가능하다.

 

- 일반 함수는 호이스팅 기술을 지원한다.

- 호이스팅기술? 함수가 아래 선언되었더라도 상위에서 호출을 할 수 있다.

- 익명함수 호출시에는 익명함수가 호출부 위에 선언이 되어 있어야한다.

 

- 함수선언시 중괄호를 유효범위 혹은 스코프 라고 한다.

- 함수에서는 전역변수와 지역변수 차별확실히다.

 

 

일반함수 : 

구문 : function 함수명 (){--자바스크립트 코드 --}
- 선언 위치 상관없이 호출이 가능한다.

	<script type="text/javascript">
		function myFn(){
			console.log('myFn호출');
		}
	</script>

결과 : myFn호출

 

 

익명함수 : 

구문 : 참조변수 = function (){-- 자바 스크립트 코드 -- };
- 선언된 아래에서 호출이 가능하다.

	<script type="text/javascript">
		var myFn2 = function(){
			console.log('myFn2 호출')
		}
	
	</script>

결과 : myFn2 호출

 

 

함수호출 : 

- 선언이 되어 있다면 호출이 가능하다.
- 함수명 혹은 참조변수명  뒤에 (); 붙어야 호출이다.

	<script type="text/javascript">
		// 변수
		var str = '홍길동';
		//str(); // 잘못된 호출이다.  함수뒤에만 ();를 써야한다.
		
		//선언된 함수명();
		myFn(); // 선언된 함수 호출
		myFn(); // 선언된 함수 호출
		myFn(); // 선언된 함수 호출
		
		//익명함수 호출 -> 변수명 ();
		myFn2(); // 선언된익명함수 호출
	</script>

 

 

지역변수와 전역변수 : 

<h2>함수의 지역변수와 전역변수</h2>
	<script type="text/javascript">
		//전역변수는 함수 내부에서 사용이 가능하다.
		var cnt = 0; // 전역변수
		//var username = '이순신'; 
		// 전역변수와 지역변수의 명칭이 같더라도 다른 변수이다.
		
		function myFn3(){
			//함수 내부에 선언된 변수는 외부에서 사용할 수 없다.
			var username = '홍길동'; // 지역변수
			console.log(username, '내부에 선언된 name 변수 호출');
			cnt++;
			console.log(cnt, '호출될 때 마다 전역변수값 변화');
		}
		
		console.log(username);
		myFn3(); // 호출을 하여야 내부에 작성된 코드가 실행된다.
		myFn3(); // 호출을 하여야 내부에 작성된 코드가 실행된다.
		myFn3(); // 호출을 하여야 내부에 작성된 코드가 실행된다.
	</script>

 

매개변수 : 

- 함수 호출시 값을 함수에 전달할 수 있고 
전달된 값을 함수에서 받을 수 있는 변수는 매개변수라고 한다.

	<script type="text/javascript">
	//매개변수 선언시 var나 let키워드는 제외하고 선언한다.
		function myFn(n1, n2){
		//구문 : function 함수명(매개변수명, 매개변수명.....){}
			console.log(n1, n2);
			
		}
	//호출시 값을 함수에 전달할 수 있다. 자리수에 맞게 전달.
	//호출시 : 함수명(인자,인자....);
	myFn(1, 2);
	</script>

결과 : 1 2

 

 

return : 

- 함수를 호출하는 곳에 데이터를 전달
- 함수를 종료

	<script type="text/javascript">
		function myFn2(n1, n2){
			console.log('함수호출');
			return n1 + n2; // 호출 한 곳에 연산하여 값을 전달
			//return 키워드로 인하여 아래 코드는 실행하지 않고 
			//함수를 종료
			console.log('함수호출2');
		}
		//값을 전달 받았으므로 변수에 대입가능
		var sum = myFn2(10,10);
		console.log(sum);
		
		function myFn3(nArray){
			console.log(nArray);
		}
		myFn3([1,2,3]);
		//매개변수 nArray에 배열 [1,2,3]을 대입한다.
		// nArray = [1,2,3];
	</script>

결과 : 함수호출

        20

        Array(3)

 

 

재귀호출 : 

- 함수 내부에서 자기 자신을 호출하는 방식

	<script type="text/javascript">
	 function myFn4(){
		 console.log('myFn4호출');
		 //myfn4() : 함수 내부에서 자기 자신 호출
	 }
	 myFn4();
	</script>

결과 : myFn4호출

 

 

익명함수와 일반함수 코드저장

	<script type="text/javascript">
		function myFn5(){
			console.log('myFn5');
		}
		var myFn6 = function(){
			console.log('myFn6');
		}
		
		console.log(myFn5);
		console.log(myFn6);
	
		var myFn7 = myFn5;
		console.log(myFn7);
		
	</script>

 

<script type="text/javascript">	
		function myFn8(fn){
			//2. 인자로 받는 값은 익명함수로 인수가 넘어왔으므로 함수이다.
			console.log(fn, typeof fn);
			
			if(typeof fn == 'function'){
				fn();
				//3. 함수이므로 실행 시킬수가 있다.
				//4. 실행을 시켰으므로 인수값으로 넘어온 내부코드가 실행된다.
			} 
		}
		
		//1. 함수를 실행하면서 익명함수를 인수에 삽입
		myFn8(function(){
			console.log('안녕하세요');
		});
     </script>

 

1. console.log(fn, typeof fn); 의 결과 : 

2. if (typeof fn == 'function') {
fn();

의 결과 : 안녕하세요

 

 

 

내부 함수

- 함수 내에 선언된 함수

	<script type="text/javascript">
	var myFn9 = function(){
		var myFn10 = function(){
			//함수 내에서도 중복코드가 발생
			//외부에서 쓰일필요가 없을 경우
			//지역함수
			console.log('myFn10');
		};
		myFn10();
	};
	myFn9();
	</script>

결과 : myFn10

 

 

함수 즉시(선언과 동시) 실행하기

	<script type="text/javascript">

		(function(myName){	
			console.log('함수 즉시 실행', myName);
		})// -> 함수 선언
		('홍길동'); // 선언된 함수 실행
	</script>

결과 : 함수 즉시 실행 홍길동

 


메서드와 함수 차이 :

메서드 : 오브젝트.메서드명( )

nArray.push();

 

함수 : 함수명( )

print();


실습

 

1. 실습. print 함수를 호출하였다. 
호출 후 결괏값이 '한국스마트정보교육원' 문구가 출력되었다.
위의 결괏값이 나오도록 함수 선언과 호출을 하도록 하여라.

	<script type="text/javascript">
		function print(){
			console.log('한국스마트정보교육원');
		}
		print();
	</script>

결과 : '한국스마트정보교육원'

 

 

2. 실습. sum이라는 함수를 호출하면서 인수 2개의 숫자를 전달하였더니
출력 결괏값이 10이 나왔다. 위의 결괏값이 나오도록 선언과 호출을 하도록 하여라.
(인자값을 합산하여 10)

	<script type="text/javascript">
		function sum(n1, n2){
			console.log(n1+n2);
		}
		sum(1, 9);
	</script>

결과 : 10

 

 

3. 실습. arrSum 이라는 함수를 호출하면서 배열 인수를 넣어 삽입하였더니
배열의 원소를 전체합산한 결괏값이 리턴되었다. 위의 내용대로 코드를
작성하여 결괏값을 출력하여라.
[10,20,30,40,50];

	<script type="text/javascript">
	
	function arrSum(nArray){
		console.log(nArray)
		var sum = 0;
		for(var i=0; i<nArray.length; i++){
			sum += nArray[i];
		 }
		return sum;
	}
	var sum = arrSum([10,20,30,40,50]);
	console.log(sum);
	</script>

결과 : 150

 

 

4. 실습. myArray 이라는 함수를 실행시키면서 숫자가 배열을 인수로 삽입하였다.
그의 결괏값이 짝수 배열이 출력되었다.위의 설명대로 코드를 작성하고 실행하여라.
[1,5,6,8,11,16]; -> 코드 실행 후[6,8,16];

	<script type="text/javascript">
	
	function myArray(n1){
		var n3 = [];
		for(var i =0; i< n1.length; i++){
			if(n1[i] %2 == 0){
				n3.push(n1[i]);
			}
		}		
		return n3;
	}
	var result = myArray([1,5,6,8,16]);
	console.log(result);
	
	</script>

 

 

	//리턴 예제
	<script type="text/javascript">
	
	function myArray(n1){
		var n3 = [];
		for(var i =0; i< n1.length; i++){
			if(n1[i] %2 == 0){
				n3.push(n1[i]);
			}
		}		
		return n3;
	}
	var result1 = myArray([1,5,8,16]);
	var result2 = myArray([1,5,16]);
	var result3 = myArray([1,6,8,16]);
	console.log(result1);
	console.log(result2);
	console.log(result3);
	
	</script>