반응형

[광고 누르면 오늘의 행운 상승!!]

  • 함수 : 미리 정의 되어 프로그래밍 여러 부분에서 복수로 호출되어 실행
  • 전달인자, 매개변수(지역변수)를 함수에 전달 가능
  • JavaScript = 함수형 언어
  • JavaScript 함수 : 객체
  • 함수의 역할
    1. 변수의 기준 : 지역변수, 전역변수
    2. 변수의 유효 범위 : 변수가 속해 있는 함수
  • JavaScript의 객체 : 생성자 함수 + 프로토 타입(메소드의 집합)
  • JavaScript의 함수 : 데이터 타입으로 변수에 할당, 값으로 전달 가능

선언적 함수

  • 함수의 정의
function 함수이름(전달인자1, 전달인자2){
		함수 실행 코드;
		return 반환값;
}

 

  • 함수 예)
function toCelsius(fahr){
	var celsius = Math.floor(5*(fahr - 32) / 9);
	return celsius;
}

함수 실행 시 섭씨 온도 반환
전달인자, 변수 - 지역변수

 

  • 함수 이름 : 선언적 함수 정의 시 필요
    → 모든 함수 정의 시, 이름이 필요한 것은 아님!

  • JavaScript의 함수 이름 : 함수를 가리키는 변수

function toCelsius(fahr){
	var celsius = Math.floor(5*(fahr - 32) / 9);
	return celsius;
}

var newFun = toCelcius;
-> 변수 newFun에 toCelsius 할당 // 함수 = 데이터이므로 변수에 할당 가능
document.writeln(newFun(100));
-> 할당된 함수는 newFun()으로 함수 호출가능

 

  • 전달 인자 : ,(쉼표) 로 분리, 데이터 타입 자유로움, 전달 인자 수 중요하다면 따로 코드 작성
  • 리턴문(반환값) : 함수 호출자에게 전달하는 값, 함수 실행 결과로 발생 리턴문 없을 시 함수에 undefined 반환

전달인자

  • JavaScript의 유연성
  1. JavaScript 쉽게 작성 가능
  2. 강력한 기능 제공
  3. 프로그램 특성 부여
  • JavaScript의 전달인자
  1. 데이터 타입 자유로움
  2. 개 수에 대한 검사 없음
  • 전달인자 생략 함수
function A(전달인자1, 전달인자2) {
	함수 실행 코드;
	return 반환값;

}

//요구하는 전달인자 수 보다 적은 수 호출

ver B = A(전달인자1);

-> 에러발생 X 모자란 전달인자 undefined
-> 생략가능한 전달인자 포함하여 함수 작성 가능

function copyArray(arr, addEle){
	var tempArray = [];
	for(var i in arr) tempArray[i] = arr[i];
	if(addEle) tempArray.push(addEle);
	return tempArray;
}

var testArray = [1,2,3];
var a = copyArray(testArray);
var b = copyArray(testArray,4);

-출력

testArray의 값은 1,2,3 입니다.

copyArray(testArray)의 값은 1,2,3입니다.

copyArray(testArray,4)의 값은 1,2,3,4 입니다.

 

배열 복사 함수

배열은 참조 타입이므로 단순한 할당으로는 복사가 되지 않고 참조의 이름만 바뀌거나 추가된다.

var first = [1,2,3];
var second = first;

second.push(4);
document.writeln(first.toString()) 

-출력
1,2,3,4

second에 4를 출력하였지만 결과적으로는 first를 수정한것과 같다.
배열은 참조타입이기 때문에 두 배열 모두 같은 배열을 참조하기 때문이다.

배열 복사 함수

function copyArray(arr){
	var tempArray = [];
	for(var i in arr) tempArray[i] = arr[i];
	return tempArray;
}

var first = [1,2,3];
var second = copyArray(first);

second.push(4);
document.writeln(first.toString()) 

-출력 
1,2,3

 

길이가 정해지지 않은 전달인자

function copyArray(arr, addEle){
	var tempArray = [];
	for(var i in arr) tempArray[i] = arr[i];
	if(addEle) tempArray.push(addEle);
	

	for(var a = 1; a< arguments.length; a++){
		tempArray[tempArray.length] = arguments[a];
		//tempArray.length : 전달 받은 인자 길이/ arguments[a] : 특정 전달인자
	}
	return tempArray
}

- copyArray 함수 : 복사한 배열에 단 하나의 값만 배열의 원소로 추가
- 새로운 함수 : 여러 개의 값을 복사한 배열 추가 - 전달인자 개수 알아야 함
- arguments : 전달 인자 의미 하는 객체, 배열 형태로 전달 받은 전달인자에 접근 가능하게 함
- length 프로퍼티 : 전달 받은 전달인자의 개수 반환

 

길이가 정해지지 않은 전달인자를 받는 함수

  • max 함수
전달받은 인자 중에서 가장 큰 값을 반환하는 함수

function max(){
	var max = Number.NEGATIVE_INFINITY;
	for(i=0; i< arguments.length; i++){
		if(arguments[i] > max) max = arguments[i];
	}
	return max;
}

var maxNumber = max(23,11,42,52,34,75,33);
document.writeln(maxNumber);

 

  • arguments 객체 : 전달인자 전달 되었는지, 데이터 타입 검사 가능
  • typeof 연산 : 데이터 타입 검사 → 객체, 배열의 경우 연산결과 모두 object로 구분 어려움
  • 전달인자 세 개의 합을 반환하는 함수 예) 1. 전달인자 3개, 2. 전달인자 숫자 타입
function trisum(a,b,c){
	if(arguments.length != 3{ //전달인자 3개인지 검사
		throw new Error("trisum 함수는 3개의 전달인자가 필요합니다.");
	}
	for( var i = 0; i < 3; i++ ){
		if(typeof arguments[i] != "number"){ //전달인자 데이터 타입 검사
			throw new Error("trisum 함수의 전달인자는 모두 숫자여야 합니다.");
		}
	}
	return a+b+c;
}
var result = trisum(2,5,1);
document.writeln(result);

 

변수test가 배열인지 객체인지 구분하는 함수

function objType(test){
	if((test instanceof Array) || typeof test == "ojbect" && "length" in test)){
		//Array 객체의 인스턴스 거나 length 프로퍼티가 존재하면 배열 존재하지 않으면 객체
		return "배열";
	}else if(typeof test == "object"){
		return "객체";
	}else{
		return "배열이나 객체 아님";
	}

}

//발생한 에러 메시지 확인 시 디버거 이용!
반응형

+ Recent posts