connecting dots

JS 함수 | 함수 형태, return, arguments, 화살표 함수, 즉시실행(IIFE), 호이스팅, 타이머 함수, 콜백(Callback) 본문

Online Class/DevCamp

JS 함수 | 함수 형태, return, arguments, 화살표 함수, 즉시실행(IIFE), 호이스팅, 타이머 함수, 콜백(Callback)

dearsuhyun 2024. 6. 12. 01:03

함수 형태

function sum(x, y) {
  // 인수를 받아줄 수 있는, 함수 선언부에 선언된 변수 = 매개변수
  console.log(x + y)
}

sum(1, 3)
sum(4, 12)
// 함수가 호출될 때 같이 들어가는 특정한 값 = 인수

 

return

function sum(x, y) {
  return (x + y)
  // sum 함수 실행되어 x+y된 값이 
  // return 통해서 이 함수 밖으로 내보내질 수 있음
}

const a = sum(1, 3)
const b = sum(4, 12)

console.log(a)
console.log(b)
--------------
console.log(sum(1, 3))
console.log(sum(4, 12))

// 함수의 결과가 반복적으로 사용될 때에는 변수에 담기
// 단일로만 사용될 때는 그냥 넣어서 호출해도 괜찮음

 

return이 사용된 부분에서 함수가 종료됨. return 밑의 코드는 실행되지 않음

function sum(x, y) {
  return (x + y)
  console.log(x)
  // 실행되지 않음

 

조건을 만들어서 특정한 내용 실행 여부를 return 키워드를 통해서 함수 안에서 작성 가능

function sum(x, y) {
  if (x < 2) {
		return 123
  }
    return (x + y)
console.log(sum(1, 3))   >> 123
// if 조건에 부합
console.log(sum(7, 3))   >> 10
// if 조건에 부합하지 않음

 

arguments

인수가 너무 많아서 매개변수 이름을 지정하기 어려울 경우 사용함

function sum() {
  console.log(arguments)
  return arguments[0] + arguments[1]

}

console.log(sum(7, 3))

// 매개변수 지정히지 않아도 함수 안에서 언제든지 사용 가능
// 7, 3이 배열 형태로 들어가 있음

 

화살표 함수

축약형으로 작성하는 함수

const double = function (x) {
  return x * 2
}
console.log('double: ', double(7))

//화살표 함수
const doubleArrow = (x) => x * 2
console.log('doubleArrow', doubleArrow(7))
// 매개변수 하나일 때는 소괄호도 생략 가능

 

매개변수 추가 가능

const double = function (x, y) {
  return x * 2
}
console.log('double: ', double(7))


const doubleArrow = (x, y) => x * 2
console.log('doubleArrow', doubleArrow(7))

 

객체데이터를 반환하는 경우에는 ({소괄호로 중괄호를 감싸줘야 함})

const doubleArrow = x => ({name: 'heropy'})
console.log('doubleArrow', doubleArrow(7))

 

즉시실행

IIFE (함수를 만들자마자 즉시 실행하는 함수 표현)

익명의 함수로 내용을 만들고 소괄호를 이용해서 바로 실행 가능

세미콜론 붙이는 것 주의

const a = 7
function double() {
  console.log(a * 2)
}
double();

// 즉시실행; 익명의 함수 만들고 소괄호 두개로 바로 실행하기

(function () {
  console.log(a * 2)
}) (); // 소괄호 밖으로

(function () {
  console.log(a * 2)
}()); // 소괄호 내부에 넣어도 상관 없음, 강의에서 더 권장

 

호이스팅(Hoisting)

함수 선언부가 유효범위 최상단으로 끌어올려지는 현상

함수가 복잡해질 때 해석을 용이하게 하기 위해 사용함

const a = 7

double()

const double = function () {
  console.log(a * 2)
}
// 함수 표현일 때
// 함수 정의 전에 선언하여 오류
const a = 7

double()

function double() {
  console.log(a * 2)
}

// 함수 선언
// 함수 선언이 호출하는 부분보다 밑에 작성되어 있어도
// 호이스팅 때문에 문제없이 작동

 

타이머 함수

  1. setTimeout(함수, 시간): 일정 시간 후 함수 실행
setTimeout(function () {
  console.log('heropy')
}, 3000) 
//3초 후에 console에 나타남

   

   2. clearTimeout(): 설정된 Timeout 함수를 종료

const timer = setTimeout(() => {
  console.log('heropy')
}, 3000)

const h1El = document.querySelector('h1')
h1El.addEventListener('click', () => {
  clearTimeout(timer)
})

//h1 클릭하면 함수 실행되어 timeout 실행해서 함수 종료

   

   3. setInterval(함수, 시간): 시간 간격마다 함수 실행

   4. clearInterval(): 설정된 Interval 함수를 종료

const timer = setInterval(() => {
  console.log('heropy')
}, 3000)
// 3초마다 heropy 출력

const h1El = document.querySelector('h1')
h1El.addEventListener('click', () => {
  clearInterval(timer)
})

// h1 클릭하면 함수 실행되어 interval 실행해서 3초마다 출력하던 함수 종료

 

콜백(Callback)

함수의 인수로 사용되는 함수

코드의 특정한 실행 위치를 보장해주는 방법으로 활용 가능

function timeout(callback) {
  setTimeout(() => {
    console.log('heropy')
    callback() 
    //timeout이라는 전체 함수에서 내가 정확하게 실행을 보장하고 싶은 곳에서 하나의 함수 실행해줄 수 있음
  }, 3000)
}
timeout(() => {
  console.log('done')
}) 

//3초 뒤에 heropy 나오고 그 다음에 done 출력
반응형