글에 앞서
본 글은 ZeroCho님의 ECMAScript 텍스트 강좌를 인용했습니다.
ES6
JavaScript의 ES시리즈란 JavaScript의 버전을 말한다. 최신 Javascript는 var부터 모든것들이 바뀌고 편의성이 개선되었다고 한다.
const, let
var을 대체하는 이 두 가지는 함수의 스코프를 따르는것이 아닌 블록 스코프를 따른다. var은 어느곳에서 선언해도 최상단으로 끌어올려지는 '호이스팅'이라는 개념때문에 개발자가 예기치 못한 상황을 많이 맞이하였지만, 이 const와 let은 그런 부분에 대해서 철저하게 반응하여서 선언한 곳보다 위에서 접근하는 것이 불가능하다. 블록이란 '{}'를 의미한다.
(function () {
console.log(x);
var x = 10;
})();
에러가 나지 않음.
(() =>{
console.log(x);
const z = 10;
}) ();
에러가 발생함.
const, let은 전역 스코프에서 선언 시 var과는 다르게 window, global에 등록되지 않는다.
const, let간의 차이
const는 선언된 값을 = 을 통한 재 선언이 불가능하다. 하지만 선언된 그 주소값만 고정하는 것이지 그 주소의 요소가 변환되는것은 상관이 없다. 따라서 필요에 따라 값을 바꾸어주는 것이 가능하다. let은 그 블록 내에서만 사용하게 되어있다. 그리고 const와는 다르게 자유로이 변환이 가능하다.
요약하면 기존 var의 기능은 let이 하고 const는 보다 제한적인 상황에 사용한다.
object(객체)의 변화
var sayYeah = function () {
alert('yeah')
};
var a = 1;
var b = 'Wow';
var object = {
sayHello: function() {
alert('Hello');
},
sayYeah: sayYeah
};
object[a + 3] = 'four';
object['say' + b] = function() {
alert('Wow');
};
기존 방식
const a = 1;
const b = 'Wow';
const sayYeah = () => {
alert('Yeah');
};
const object2 = {
sayHello() {
alert('hello');
},
sayYeah,
[a + 3]: 'four',
['say' + b]() {
alert('Wow');
}
};
ES2015 방식
sayYeah는 yeah라는 문자열을 출력해주는 함수이다. 그리고 그 함수를 표현식으로 작성하였다. 두 가지 모두 object를 가지고있고 object내에는 sayHello라는 함수를 가지고 있다. 차이점을 살펴보자면 화살표 함수를 통한 function이라는 구문의 생략, 객체 내에서 함수를 불러올때도 function이 생략된다.
요약하자면 function이라는 구문을 생략하기 위한 시스템적 변화를 알 수 있다. 정도로 넘어가면 될 것 같다.
함수의 변화
var object = {
name: 'Kim',
friends: ['One', 'Two', 'Three'],
alertFriends: function () {
var self = this;
this.friends.forEach(function(friend) {
alert(self.name + 'and' + friend);
});
}
};
object.alertFriends();
기존 함수 방식
const object2 = {
name: 'Kim',
friends: ['One', 'Two', 'Three'],
alertFriends() {
this.friends.forEach((friend) => {
alert(this.name + ' and ' + friend);
});
}
};
object2.alertFriends();
원래는 함수 내에서 함수를 선언 바깥함수에서 this로 저장된 값을 self라는 곳에 따로 저장을 해서 두번의 번거로운 작업을 거쳤는데 이제는 그럴 필요없이 바깥함수에서 선언된 this를 그대로 안쪽에서도 사용 할 수 있다.
그리고 return만 있는 간소한 함수를 더 간소하게 바꾸었다.
var long = function (x){
return x;
}
const long = (x) => x;
Ghost