1. let / const (호이스팅 때문에 탄생)
호이스팅 : js의 경우 변수 선언일때 해당 함수의 가장 첫번째에 자동으로 var 변수; 로 선언된후 해당 라인에서 초기화가 된다. 하지만 만일 스코프가 다른 변수가 있을시엔?! 함수이름과 변수 이름이 같을시엔?! 과 같이 문제점이 발생한다.
이를 위해 ecma6에서 블록안에서만 / 상수 등이 탄생 하여 스코프에 대한 영향력을 줄였음.
아래와 같이 소스가 된다면
var snack = 'Meow Mix';
function getFood(food) {
if (food) {
var snack = 'Friskies';
return snack;
}
return snack;
}
console.log(getFood(false)); // undefined
아래 소스처럼 자동으로 변환됨 (가장 위로 변수 선언이 바뀌게됨)
var snack = 'Meow Mix';
function getFood(food) {
var snack;
if (food) {
snack = 'Friskies';
return snack;
}
return snack;
}
console.log(getFood(false)); // undefined
이를 위해 let키워드 사용
let snack = 'Meow Mix';
function getFood(food) {
if (food) {
let snack = 'Friskies';
return snack;
}
return snack;
}
getFood(false); // 'Meow Mix'
2. IIFE (즉시함수 호출 표현식)
기존엔 자바스크립트엔 스코프가 함수스코프와 글로벌 스코프 두가지 밖에 없었습니다.
다른 스코프가 있는 언어와 달리 아래의 소스에선 10이 출력됩니다. (블록 스코프가 존재하지 않습니다.)
{
var a = 10;
}
console.log(a);
그래서 스코프를 위해서 따로 함수를 쓰기도 했었습니다. 아래와 같이 임의로 스코프를 주기위해 함수를 사용할수 있습니다.
function test(){
var a = 10;
}
console.log(a);
그래서 기존엔 함수 선언시에도 ()안에 function()이 있어야 했습니다. ()는 IIFE죠.
(function () {
}
)()
ecma6에선 left을 통해서 블록 스코프를 지정하게 됩니다.
{
let a = 10;
}
console.log(a);
3. Arrow Functions
- map은 기존의 each와 같지만 function을 안에서 돌린다고 생각하면 됨
기존엔 안에 간단한 함수에도 function(){}를 선언해 줘야 했지만 => 로 끝.
var m = [1, 2, 3, 4, 5].map(function(elem){
return elem*2;
});
console.log(m);
애로우 함수 적용 예
var m = [1, 2, 3, 4, 5].map(elem => elem*2 );
console.log(m);
4. Template Literals
var name = 'Tiger';
var age = 13;
console.log('My cat is named ' + name + ' and is ' + age + ' years old.');
string에 ``으로 구분으로 ${}가 변수로 치환!! (이건 너무 좋음)
const name = 'Tiger';
const age = 13;
console.log(`My cat is named ${name} and is ${age} years old.`);
5. Destructuring
let [a, b, c, d] = [1, 2, 3, 4];
console.log(a); // 1
console.log(b); // 2
리스트의 리턴값을 각각 지정해서 넣을수 있음 (만일 리턴 갯수가 같지 않으면 해당 리턴값은 무시됨)
6. Default Parameters
function addTwoNumbers(x=0, y=0) {
return x + y;
}
console.log(addTwoNumbers()); //0
console.log(addTwoNumbers(1, 2)); //3
7. Rest Parameters
리스트를 ...으로 해당 원소들의 리스트로 반환
var list1 = [1, 2, 3, 4];
var list2 = [5, 6, 7];
var list3 = [list1, list2];
var list4 = [...list1, ...list2];
console.log(list3); //[[1, 2, 3, 4], [5, 6, 7]]
console.log(list4); //[1, 2, 3, 4, 5, 6, 7]
8. Classes
class Person {
constructor(name, age, gender) {
this.name = name;
this.age = age;
this.gender = gender;
}
incrementAge() {
this.age += 1;
}
}
class Personal extends Person {
constructor(name, age, gender, occupation, hobby) {
super(name, age, gender);
this.occupation = occupation;
this.hobby = hobby;
}
incrementAge() {
super.incrementAge();
this.age += 20;
console.log(this.age);
}
}
var p1 = new Personal("uiandwe", 20, "woman", "!", "@");
p.incrementAge();
ECMAScript6를 사용하기 위해선 babel를 사용하시면 하위 버전으로 컨버팅 됩니다!!
'web > jQuery' 카테고리의 다른 글
script로 HTML DOM을 생성/추가 하면 왜 bind()/on()이 작동하지 않을까? (2) | 2015.09.24 |
---|---|
jquery 레티나 체크 함수 (0) | 2015.09.21 |
파이어폭스 / IE 에서 scoll 이벤트가 안될때 (0) | 2015.09.18 |
jquery change (0) | 2012.11.21 |
Useful jQuery Datepicker (0) | 2012.11.20 |