React (js, css)

Arrow function

younaeun 2022. 6. 16. 17:06

 오늘은 화살표 함수(arrow function)에 대해 정리해보겠다.

 화살표 함수란?

-> 화살표 함수는 전통적인 함수표현의 간편한 대안임 but 몇 가지 제한이 있음

  • this나 super에 대한 바인딩이 없고, methods 로 사용될 수 없습니다.
  • new.target키워드가 없습니다.
  • 일반적으로 스코프를 지정할 때 사용하는 callapplybind methods를 이용할 수 없습니다.
  • 생성자(Constructor)로 사용할 수 없습니다.
  • yield를 화살표 함수 내부에서 사용할 수 없습니다

 지금은 this랑 super을 못 쓴다는 것 정도만 알면 충분할 듯

 그럼 구체적으로 ㄱㄱ

 

1)   (매개변수) => { 본문 }

 기존의 함수 표현식에서 function 키워드를 삭제하고 괄호()와 코드블록({}) 사이에 화살표(=>)만 넣어주면 화살표함수가 된다.  예를 한 번 들어보장 

const message = function () {
	console.log('유나은');
}

const message = () => console.log('유나은');

이런식으로 사용할 수 있다. 

 

2)   본문이  return [식 or 값] 뿐인 경우  { } 와  return 키워드 생략 가능

만약 함수 내부 내용이 반환값만 있다면 중괄호와 return을 생략할 수 있다.

let day = function() {
	return new Date();
}
let day = () => new Date();

아주 깔끔...! 보다시피 기존의 함수표현식에서 {}와 return을 삭제함으로써 간략하게 코드를 구현시켰다.

 

3)   매개변수가 하나뿐인 경우 괄호 생략 가

let add = function (a) {
	return a*a;
}
//let add = (a) => {
//	return a+a;
//}

let add = a => a+a;

 위는 모두 a에 자기자신을 한 번 더해주는 함수이다. 모두 같은 기능으로 사용하였고, 매개변수가 한 개여서 ()를 생략하여 쓰기도 했다.

 

4) return 할 값이 객체인 경우 괄호 필수

let object = function() {
	return {
    	x : x
    }
}
let object = x => ({ x });

 함수 내부의 내용이 반환값만 있어도 그 값이 객체 리터럴일 경우 return과 코드블록({})을 생략하면 남은 값을 화살표 함수의 함수 스코프로 인식하여 에러가 난다.

 따라서 객체를 즉시 반환해야 하는 경우 위의 코드와 같이, 객체임을 명시적으로 알려주기 위해 ()로 묶어줘야 한다.

 

-> 매개변수가 없을 경우에도 괄호는 필수!

 

6) 실행 컨텍스트 생성시  this *바인딩을 하지 않음

-> 바인딩 : 프로그램의 기본 단위(예시: 변수)에 해당 기본 단위가 가질 수 있는 속성 중에서 일부 필요한 속성만을 선택하여 연결해 주는 것

const obj = {
    a : function () {
        console.log(this); // (1)obj

        const b = function() {
            console.log( this ); // (2)this 바인딩하는 객체가 window
        };
        b();
    }
};

obj.a();

const obj2 = {
    a : function () {
        console.log(this); // (3)obj

        const b = () => {
            // this 를 바인딩하는 동작 자체를 하지 않음
            console.log( this ); // (4)obj
        };
        b();
    }
};

obj2.a();

https://webclub.tistory.com/649에서 들고온 코드이다.

(1) - 1의 this는 위의 obj를 가리킨다.

(2) - 2의 this는 외부에 있다고 인식되어 window를 가리킨다.

(3) - 1과 마찬가지로 obj

(4) - 그냥 바인딩 x 이므로 obj 출력