JavaScript

일반함수 VS 화살표 함수

@kkkk_biiin 2023. 12. 22. 15:05
728x90

일반함수

함수 선언식

  • 호이스팅이 됨: 따라서 함수 위에 main()을 호출해되 잘 작동이 됨
  • 함수의 이름이 필수적이어야 해서 익명함수는 불가능
function main() {
   console.log('main')
}

 

 

함수 표현식

  • 익명함수로 사용 가능
  • 호이스팅이 되지 않음
cosnt main = function() {
   console.log('main')
}

 

 

화살표 함수

  • 함수 표현식을 간결하게 만들어줌 
const main = () => {
   console.log('main')
}

 

 

일반함수와 화살표 함수의 차이점(arguments)

  • 일반함수는 매개변수를 넘겨주지 않아도 arguments라는 변수에 매개변수들이 담김
  • 화살표 함수는 arguments 변수를 사용하면 not defined가 나오기 때문에 () 안에 명시해줘야 함.
// 일반 함수
function main() {
   console.log('arguments')
}

main(1,2,3) // [1,2,3]이 출력이 됨


// 화살표 함수
const main = () => {
   console.log('arguments')
}
main(1,2,3) // 화살표 함수에도 적용을 하면 not defined가 나옴

// 화살표 함수에서 arguments 사용하기
const main = (...args) => {
   console.lo(args)
}
main(1,2,3)

 

 

일반함수의 this와 화살표함수의 this

  • 일반 함수는 함수의 호출 위치 시점에서 결정됨
  • 화살표 함수의 this는 선언된 위치 시점에서 결정됨
    • 아래의 object는 전역 상태에서 선언됐기 때문에 window 객체가 출력이 됨
  • 화살표 함수는 this에 접근하기 어렵기 때문에 객체의 메서드로 사용하기에 좋지 않음
const object = {
   name: 'object',
   main: function() {
      console.log(this)
   }
   mainArrow: () => {
      console.log(this)
   }
}

object.main() // object 객체가 출력
object.mainArrow() // window(전역) 객체가 출력
728x90