ES5같은 경우, 객체 내에 있는 메서드를 실행하면 메서드의 this는 메서드가 선언된 해당 객체를 가리킨다.
하지만 객체안에서 선언된 함수의 this는 해당 객체가 아닌 window를 바라보기 때문에 함수의 this는 window값이 나오게 된다.
이런 경우, this를 바인딩 시키거나 this를 해당 변수에 담아서 사용할 수 있었다.
ES6에서의 this는 자신을 둘러싸고 있는 this를 바라보기 때문에 따로 바인딩이나 변수에 담을 필요 없이 사용 가능하다.
결정적인 차이점은
일반 함수는 함수를 선언할 때 this에 바인딩할 객체가 정적으로 결정된느 것이 아니고, 함수를 호출할 때 어떻게 호출되었는지에 따랏 this에 바인딩할 객체가 동적으로 결정된다.
화살표 함수는 함수를 선언할 때 this에 바인딩할 객체가 정적으로 결정된다. (화살표 함수의 this는 언제나 상위 스코프의 this를 가리킨다)
ES5에서는 이미 준비되어있는 틀안에 해당하는 값만 상황에 알맞게 넣어서 사용할 수 있었다.
ES6부터는 `` 백틱과 ${} 을 통해 한줄로 표기 가능하며 single quotation과 double 모두 자유롭게 사용 가능하다.
객체의 속성을 작성할 때 변수명과 동일할 경우 생략 가능.
객체 생성 시, 변수 값을 객체의 속성을 지정하는 경우 속성 값을 생략하여 표기 가능
ES5 이전 버전에서는 클래스가 제공되지 않았다.
ES6 부턴 공식적으로 클래스를 지원한다.
ES5의 자바스크립트 파일은 script 태그로 분리해서 독자적인 모듈 스코프를 갖지 않았다.
모듈 내부에서 선언된 모든 변수, 함수, 객체, 클래스는 모두 지역적인 것 (local)로 간주된다. 따라서 외부로 공개하고자 하는 것은 export하고 다른 모듈에선 import 구문으로 참조하여 사용 가능하다.
import 할 때 이름 변경하고 싶으면 as
예약어 사용
import 할 때 단일 객체 (export default) 되었다면 구조분해할당 사용하지 않고 단일 객체로 가져온다.
export default func;
import func from './utils/func';
이전까진 AJAX 처리를 위한 비동기 작업을 수행할 때 비동기 처리가 완료되면 콜백함수가 호출되도록 작성했지만, 이 방법은 비동기로 처리해야할 작업이 많다면 콜백이 중첩되어 콜백헬을 만들어 예외 처리가 어려울 수 있다.
ES6부터는 Promise 객체를 지원해 비동기 처리를 보다 깔끔하게 수행할 수 있다.
... 연산자를 함수의 인자로 사용하는 경우 가변 파라미터 (Rest Parameter)라고 부른다.
rest parameter는 개별 값을 나열하여 함수의 인자로 전달하면 함수의 내부에서 배열로 사용할 수 있도록 한다.
spread operator는 rest parameter와 사용법이 다르다.
배열이나 객체를 ...와 함께 객체 리터럴, 배열 리터럴에서 사용하면 분해된 값으로 전달된다.
let obj1 = { name: 'melon', age: 20 };
let obj2 = { ...obj1 };
let obj3 = { ...obj1, nationality: 'KR' };
console.log(obj1 === obj2); // false
console.log(obj2); // { name: 'melon', age: 20 }
console.log(obj3); // { name: 'melon', age: 20, nationality: 'KR' };
let arr1 = [ 1, 2, 3 ];
let arr2 = [ 'apple', ...arr1, 'pineapple' ];
console.log(arr2); // ['apple', 1, 2, 3, 'pineapple']
배열, 객체의 값을 추출하여 여러변수에 할당할 수 있는 기능
let arr = [1, 2, 3, 4];
let [a1, a2, a3] = arr;
console.log(a1, a2, a3); // 1, 2, 3
let obj = { name: 'melon', age: 30, nationality: 'KR' };
let { name: n, age: a, nationality } = obj;
console.log(n, a, nationality); //melon 30 KR
ES6 이상의 JS 버전은 브라우저별로 지원이 상이하기 때문에 트랜스파일러 인 바벨 을 사용하여 ES6 -> ES5로 변환하면 된다.
ES6 (ECMA Script 2015)에서 바뀐 문법에는
트랜스파일러인 바벨을 이요해 ES6+ -> ES5로 변환한다.
https://im-nc2u.tistory.com/entry/ES6-ECMAScript-2015-문법-포인트
https://yceffort.kr/2020/05/difference-between-function-and-arrow