함수는 코드의 집합이기 때문에 필요할때마다 호출한다.
함수 호출 시 해당 함수의 이름을 부르는데, 이때 별다른 이름이 붙어있지 않은 함수를 익명 함수라고 한다.
예시:
const 함수 = function() {
console.log('함수 내부의 코드 입니다...1')
console.log('함수 내부의 코드 입니다...2')
console.log('함수 내부의 코드 입니다...3')
console.log('함수 내부의 코드 입니다...4')
console.log('함수 내부의 코드 입니다...5')
console.log('')
}
함수()
함수()
console.log(typeof 함수)
console.log(함수)
function() {}을 넣었다.()를 사용해서 변수 안에 들어있는 함수를 호출했다. function() {}를 정의하기 때문에, "함수"의 자료형은 function이다.익명 함수와는 다르게, 함수 생성 시 해당 함수에 이름을 부여한 것을 선언적 함수라고 한다.
예시:
function 함수() {
console.log('함수 내부의 코드 입니다...1')
console.log('함수 내부의 코드 입니다...2')
console.log('함수 내부의 코드 입니다...3')
console.log('함수 내부의 코드 입니다...4')
console.log('함수 내부의 코드 입니다...5')
console.log('')
}
함수()
함수()
console.log(typeof 함수)
console.log(함수)
fconsole.log('함수 내부의 코드 입니다...1')을 넣었다.f 함수()라고 표시되어 있는 것을 확인할 수 있다.()안에 넣는 input값을 매개변수라고 한다.return이라는 키워드에 반응하여 출력된다.function 함수이름 (매개변수, 매개변수, 매개변수) {
statement
statement
return 리턴값
}
예시 : 특정 년도는 윤년일까?
function leapYear (year) {
return (year % 4 === 0) || (year % 400 === 0) && (year % 100 !== 0)
}
console.log(`2020년은 윤년일까? === ${leapYear(2020)}`)
console.log(`2000년은 윤년일까? === ${leapYear(2000)}`)
console.log(`2011년은 윤년일까? === ${leapYear(2011)}`)
function leapYear(year)year에 어떤 값을 넣는지에 따라 리턴값이 달라진다.year가 4 혹은 400으로 나누어 떨어지고, 100으로는 나눠 떨어지지 않으면 윤년이다.year % 4 === 0과 year % 400 === 0은 &&연산자로 묶이고,year % 100 !== 0의 경우 ||로 묶인다.function 함수이름 (...나머지 매개변수) { }
함수의 매개변수 앞에 마침표를 3개 붙이면 매개변수들이 배열로서 들어온다.
예시:
function sample(...items) {
console.log(items)
}
sample(1,2)
sample(1,2,3)
sample(1,2,'셋')
sample(1,2) = [1, 2]sample(1,2,3) = [1, 2, 3]sample(1,2,'셋') = [1, 2, '셋']나머지 매개변수는 일반 매개변수와 조합해서 사용할 수 있다.
function 함수이름 (매개변수, 매개변수, ...나머지 매개변수) { }
예시:
function sample(a,b,...c) {
console.log(a,b,c)
}
sample(1,2)
sample(1,2,3)
sample(1,2,3,4)
(...c)에 해당하는 (3,4)의 경우, 배열 형태로 콘솔에 찍힌다. sample(1,2) = 1, 2sample(1,2,3,4) = 1, 2, [3, 4]나머지 매개변수와 일반 매개변수를 조합할 때, 매개변수의 자료형에 따라 구분하고 맞는 조건의 원하는 결과값을 리턴해주는 함수를 구현하기 위해선 매개변수가 배열인지 정확하게 확인할 수 있는 Array.isArray()라는 메소드를 활용해야 한다.
const max = function(a,...array) //일반 매개변수와 나머지 매개변수를 조합해서 매개변수의 자료형이 다양할 수 있도록 설정
let output // 함수의 결과값으로 리턴될 변수를 선언
let items // 매개변수로 들어온 값이 배열일 경우, 배열의 값을 대표할 변수
if (Array.isArray(a)){ //만약 "a"로 들어온 매개변수의 자료형이 "배열"일 경우,
output = a[0] // "a"라는 배열의 첫번째 요소를 대입
items = a // "a"라는 배열 자체의 값을 의미 >> 이미 배열
} else if (typeof(a)==='number'){ // 만약 "a"로 들어온 매개변수의 자료형이 "숫자"일 경우,
output = a // 들어온 숫자의 첫번째 값으로 대입됨
items = array // 숫자로 들어온 매개변수들의 나머지 숫자들로 대입 (첫번째 숫자를 제외한)
//***...나머지 매개변수***로 인해 숫자로 들어온 숫자들도 배열로 변한다. >> 이제 배열
}
for (const i of items){ // 반복 변수 "i"에 배열"items"의 요소 값이 들어간다. (호출 시 인덱스가 아닌 인덱스가 가진 "값"이 표시된다)
if (output < i){ // output의 값이 i보다 작을 경우,
output = i // output에 i가 대입된다.
}
}
return output // 해당 반복문이 실행되면 items라는 배열에 있는 모든 요소들이 1번요소로 지정된 output의 크기와 비교된다. 그래서 결과를 출력했을 때 배열 안에 있는 최댓값이 출력될 수 있다.
}
console.log(`max(배열): ${max([1,2,3,4])}`)
console.log(`max(숫자, ...): ${max(1,2,3,4,10)}`)
배열을 전개해서 함수의 매개변수로 만들어주는 연산자다. (spread operator)
매개변수로 배열을 입력할 수 없는 상화에 배열을 해당 함수의 매개변수로 사용하고자 할 때 사용한다.
function 함수이름 (...배열) { }
예시:
function sample (...items){
console.log(items)
}
const array = [1, 2, 3, 4]
console.log(sample(array)+`전개 연산자가 없는 경우`)
console.log(sample(...array) + `전개 연산자 사용`)
[Array(4)](4) [1, 2, 3, 4]같은 매새변수를 여러 번 반복해서 입력하는 비효율성을 보안하기 위한 방식.
매개변수에 기본값을 미리 지정해두는 방식이다.
기본 매개변수의 경우, 일반 매개변수의 오른쪽에 사용한다.
function 함수이름 (매개변수, 매개변수 = 기본값, 매개변수 = 기본값) { }
예시:
function income (name, wage = 8590, hours = 40){
console.log(`# ${name}님의 급여정보`)
console.log(`- 시급: ${wage}원`)
console.log(`- 근무시간: ${hours}시간`)
console.log(`- 급여: ${wage * hours}원`)
console.log(``)
}
income ('철수')
income ('영희', 10000)
income ('민수', 10000, 52)
income('철수')의 경우, 매개변수에 wage와 hours에 해당하는 매개변수를 넣지 않았기 때문에 기본 매개변수가 적용되어 income ('철수', 8590, 40)으로 기입한 것과 다름 없이 출력된다.income('영희', 10000)의 경우, 매개변수 hours에 해당하는 매개변수를 넣지 않았기 때문에 hours의 경우, 기본 매개변수인 40이 적용된다.income('민수', 10000, 52)의 경우, 모든 매개변수에 특정 값을 넣었기 때문에 변수값에 맞춰서 출력된다. 아... 함수 제일 어렵다... 너무 복잡해...
매우 흥미롭지만 당장 이해하기엔 굉장히 오래 걸린다.
뇌에 꽉꽉 넣으려고 하니 이 친구가 좀 힘들어하지만 공부 자체는 재밌다!
엥 천천히 공부하고싶어라..
출처: 혼자 공부하는 자바스크립트 (한빛미디어)