반응형
[광고 누르면 오늘의 행운 상승!!]
- 함수 : 미리 정의 되어 프로그래밍 여러 부분에서 복수로 호출되어 실행
- 전달인자, 매개변수(지역변수)를 함수에 전달 가능
- 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의 유연성
- JavaScript 쉽게 작성 가능
- 강력한 기능 제공
- 프로그램 특성 부여
- JavaScript의 전달인자
- 데이터 타입 자유로움
- 개 수에 대한 검사 없음
- 전달인자 생략 함수
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 "배열이나 객체 아님";
}
}
//발생한 에러 메시지 확인 시 디버거 이용!
반응형
'5. 웹 프로그래밍 > 3. JavaScript' 카테고리의 다른 글
웹 문서의 조작 [JavaScript][getArrtibute][setArrtibute] (0) | 2020.03.19 |
---|---|
웹 문서 접근 [JavaScript][getElementBy][querySelector] (0) | 2020.03.19 |
배열의 메소드 [JavaScript][배열 메소드] (0) | 2020.03.19 |
배열의 원소 접근 [JavaScript][배열원소] (0) | 2020.03.19 |
배열 [JavaScript][배열 리터럴][Array] (0) | 2020.03.19 |