ECMAScript 2015(ES6)는 매년마다 업데이트 되고 있으며 현재 ES7,ES8,ES9,ES10 까지 나온상태이다.
그 중에서도 ES6는 현재 모든 프론트엔드 개발자들이 사용하고 있으며 표준화되어 있다.
ES6를 사용하면서도 정확한 개념을 잘 모르고 사용한 것들을 정리해보았다.
arrows
기존 function을 대신해서 화살표(=>)를 사용하여 함수를 선언할 수 있다.
그러나 완전히 function을 대신하지는 않는다.
1 | const abc = function(a) { |
1) this 변경
항상 이 부분이 헷갈렸다. function으로 선언했을 때 this와 화살표 함수로 선언했을 때 this의 차이점!!!
화살표 함수는 자신을 포함하는 외부 scope에서 this를 계승받는다.
즉, 자신만의 this를 생성하지 않는다. (lexical this)
화살표 함수에서는 내부함수여도 this가 화살표 함수가 선언된 곳에서 상위의 context를 가리치게 된다.
1 | //function 예제 |
2) 화살표함수 사용하면 안되는 케이스
객체의 this를 바인딩하지 않고 전역객체가 바인딩된다.
즉, 객체의 메소드를 정의할 때는 사용하면 안된다.
1 | const obj1 = { |
마찬가지로 생성자 함수로 사용할 수 없다.
또한 addEvent Listener함수에서 콜백함수에서 사용하면 this는 상위 컨텍스트를 가르킨다.
1 | const btn = document.getElementById('button'); |
3) arguments 대신 args 사용
매개변수를 지정하지 않아도 arguments라는 프로퍼티가 함수에 자동으로 생성되어 사용가능했었다. es6에는 arguments는 사라지고 args가 생겼다.(매개변수지정필요)
매개변수 부분에 rest파라미터 (…)을 사용하여 가변인자 함수 내부에 배열로 전달 할 수 있다.
1 | const foo = function() { |
Destructuring(구조분해할당)
배열과 객체에서 패턴 매칭을 통한 데이터 바인딩을 제공한다.
할당 실패시에는 undefined값이 자동으로 할당된다.
1) array Destructuring (배열 구조분해할당)
1 | const [a, b, ...c] = [1, 2, 3, 4, 5, 6]; // a: 1, b: 2, c: [3,4,5,6] |
…을 사용하여 나머지 변수들에 배열 구조분해할당이 가능하다.
2) object Destructuring (객체 구조분해할당)
1 | const { a, b } = { a: 1, b: 2 }; //a: 1, b: 2 |
객체의 키값이 동일할 때 구조분해할당이 가능하다.