공부/Javascript
JS 함수
도리암
2022. 2. 9. 21:20
함수의 종류
- 기명함수
- 익명함수
function sum(x,y) {
return x+y
} // 기명함수
const a = sum(1, 5) //익명함수
const b = sum(2, 4)
console.log(a)
console.log(b)
console.log(a+b)
console.log(sum(1, 7))
// 함수 호출 횟수를 최대한 줄이는 것이 좋으므로 보통은 변수에 담아서 사용
return 키워드를 만나면 함수가 종료됨.
return 키워드 밑의 코드들은 실행되지 않음.
const sum1 = function (x,y) {
if (x<2) {
console.log("x<2")
return
}
console.log("x>=2")
return x+y
}
console.log(sum1(6,6))
console.log(sum1(1,2))
인수가 많으면 arguments라는 키워드로 매개변수를 받을 수 있음.
arguments는 배열 형태를 띔
function sum2() {
console.log(arguments)
return arguments[0]+arguments[1]
}
console.log(sum2(7,3))
화살표 함수
일반적인 함수의 형태는 다음과 같다.
const double = function(x) {
return x*2
}
console.log('double: ', double(7))
화살표 함수의 형태는 다음과 같다.
const doubleArrow = (x) => {
return x*2
}
console.log('doubleArrow: ', doubleArrow(7))
함수 내용에 return 키워드만 존재한다면 함수를 축약할 수 있다.
const doubleArrow = (x) => x*2
console.log('doubleArrow: ', doubleArrow(7))
매개변수가 하나라면 다음과 같은 형태로도 축약이 가능하다
const doubleArrow = x => x*2
console.log('doubleArrow: ', doubleArrow(7))
모든 데이터를 반환 가능. (숫자, 문자, undefined, 배열, 객체 등)
객체 데이터를 반환할 때는 중괄호를 사용하므로 객체를 소괄호로 감싸줘야 한다.
const ObjectReturn = () => ({name: 'Riam'}) //매개변수가 없으므로 ()로 기술 가능
console.log('ObjectReturn: ', ObjectReturn())
즉시 실행 함수
IIFE, Immediately-Invoked Function Expression
함수를 만들자마자 바로 실행하는 함수.
아래와 같은 두가지 형태가 모두 가능하다. (괄호의 위치)
const a = 7;
(function () {
console.log(a*2)
})();
(function () {
console.log(a*2)
}());
호이스팅(Hoisting)
함수 선언부가 유효범위 최상단으로 끌어올려지는 현상.
const a = 7
double()
const double = function () {
console.log(a2 * 2)
}
익명함수는 호출부가 선언부보다 위에 있으므로 오류가 발생한다.
const a = 7
double()
function double() {
console.log(a*2)
}
기명함수는 호출부가 선언부보다 위에 있어도 선언부를 자동으로 위로 끌어올려서 인식하므로 오류가 발생하지 않는다.
타이머 함수
setTimeout(함수, 시간) | 일정 시간 후 함수 실행. (시간은 ms단위) |
setInterval(함수, 시간) | 일정 시간 후 함수 실행 반복. (시간은 ms단위) |
clearTimeout() | Timeout 함수의 타이머 진행 정지. |
clearInterval() | Interval 함수의 타이머 진행 정지. |
setTimeout(function () {
console.log('Riam~')
}, 3000) // 기명함수 표현. 3초 후 콘솔창에 Riam~ 표시
setTimeout(()=>{
console.log('Riam~')
}, 3000) // 화살표함수 표현. 3초 후 콘솔창에 Riam~ 표시
const timer = setTimeout(()=>{
console.log('riam3')
}, 3000)
const h1El = document.querySelector('h1')
h1El.addEventListener('click', () =>{
clearTimeout(timer)
}) //타이머가 작동할 때 h1 태그를 클릭하면 타이머를 멈춘다.
콜백(Callback)
함수의 인수로 사용되는 함수.
function timeout() {
setTimeout(() => {
console.log('callback')
}, 3000)
}
timeout()
console.log('Done!')
위 코드는 Done! 이 먼저 출력된 후 3초 뒤에 callback이 출력된다.
function timeout(cb) {
setTimeout(() => {
console.log('Callback')
cb()
}, 3000)
}
timeout(() => {
console.log('Done')
})
이렇게 하면 Callback 이 출력된 후 Done이 출력된다.
익명함수를 인수로 넘겨서 cb()라는 함수 호출문으로 실행하는 것.