SW/JavaScript

함수

맛대 2022. 4. 30. 15:03

함수

  • 참조타입, function 타입
  • 일급 객체
    • 변수에 할당 가능
    • 함수의 매개변수로 전달 가능
    • 함수의 반환 값으로 사용 가능

함수 선언식

function add(n1, n2){
    n1 + n2
}
add(1,2)
  • 함수의 이름과 함께 정의하는 방식

  • 구성

    • 함수의 이름
    • 매개변수 (소괄호)
    • 몸통 {중괄호}
  • 호이스팅

함수 표현식

const add = function (n1, n2) {
    return n1 + n2
}
add(1,2)
  • 함수를 표현식 내에서 정의하는 방식

  • 함수 이름을 생략하고 익명 함수로 정의 가능(function 뒤에 이름이 없음)

  • 구성

    • 함수 이름(생략 가능)
    • 매개변수 (소괄호)
    • 몸통 {중괄호}
  • 호이스팅X

  • Airbnb Style Guide 권장

JS 함수 특징

기본인자

  • 인자 작성시 = 문자 뒤 기본 인자로 선언
const greeting = function (name = 'ljm'){
    return `hello ${name}`
}
greeting()        // hello ljm

매개변수 인자 개수 불일치 허용

  • 인자를 더 많이 줄 경우
const twoArgs = function (arg1,arg2) {
    return [arg1,arg2]
}
noArgs(1,2,3)        // [1,2]
  • 인자를 더 적게 줄 경우
const threeArgs = function (arg1,arg2,arg3) {
    return [arg1,arg2,arg3]
}
threeArgs(1,2)        // [1,2,undefined]

Rest parameter(...) & spread operator

Rest parameter
  • python 에서 의 언팩(*)과 비슷
  • 사용시 함수가 정해지지 않은 수의 매개변수를 배열 형태로 받음
const restpara = function (arg1, arg2, ...restArgs){
    return [arg1,arg2,restArgs]
}
restpara(1,2,3,4,5)        // [1,2,[3,4,5]]
restpara(1,2)            // [1,2,[]]
spread operator
const spreadOpr = function (arg1,arg2,arg3){
    return arg1 + arg2 + arg3
}
const numbers = [8,5,0]
spreadOpr(...numbers)        // 13

Arrow Function (화살표 함수)

  • function 키워드 생략 가능
  • 매개변수가 한개 뿐이면 () 생략 가능
  • 몸통이 표현식 한개일 경우 {},return생략 가능
const bfArrow = function (name) {
    return `hi, ${name}`
}
//function 생략
const arrow1 = (name) => {return `hi, ${name}`}
// ()생략
const arrow2 = name => {return `hi, ${name}`}
// {} return 생략
const arrow3 = name => `hello, ${name}`

this (객체 문서 참조) 사용시 차이 발생

const obj = {
    PI: 3.14,
    radiuses: [1,2,3],
    area: function(){
        this.radisues.forEach(function(r){
            console.log(this.PI * r * r)
        }.bind(this))
    },
}
  • forEach이후의 함수에서 this에서 문제 발생

    • forEach는 메서드가 아님 => this.PI 가 window의 PI를 찾게됨

      • 함수객체 .bind(this) 사용

      • Arrow Function 사용

const obj = {
    PI: 3.14,
    radiuses: [1,2,3],
    area: function(){
        this.radiuses.forEach((r)=>{
            console.log(this.PI * r * r)
        })
    },
}

'SW > JavaScript' 카테고리의 다른 글

AJAX & 동기식,비동기식  (0) 2022.05.02
DOM 조작 & Event  (0) 2022.04.30
String & Array & Objects  (0) 2022.04.30
연산자 & 조건문 & 반복문  (0) 2022.04.30
Data type & 변수 선언 & 식별자  (0) 2022.04.30