Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- node.js
- NEST
- S3
- DB
- 병행제어
- OS
- 알고리즘
- 컴퓨터
- rest docs
- 백준
- 노드
- 보안
- 컴퓨터 보안
- 되추적
- access control
- node
- DATABASE
- API문서
- 디비
- AWS
- 데이터베이스
- 컴퓨터보안
- 백트래킹
- 자바스크립트
- 탐욕기법
- 운영체제
- ES6
- IT
- 인터럽트
- 스프링부트
Archives
- Today
- Total
개발스토리
ES6(2) 본문
화살표 함수
- 화살표 함수(arrow function)라는 새로운 함수가 추가되었으며, 기존의 function() {}도 그대로 사용할 수 있다.
function add1(x,y){
return x+y;
}
const add2 = (x,y) => {
return x+y;
}
const add3 = (x,y) => x+y;
const add4 = (x,y) => (x+y);
function not1(x){
return !x;
}
const not2 = x => !x;
add1, add2, add3, add4는 같은 기능을 하는 함수다.
not1, not2도 같은 기능을 하는 함수이다.
화살표 함수는 function 선언 대신 => 기호로 함수를 선언한다. 또한 변수에 대입하면 나중에 재사용할 수 있다.
화살표 함수가 기존 fucntion과 다른 점은 this 바인드 방식이다. 다음 예제를 보자.
var relationship1 = {
name : 'zero',
friends : ['nero', 'hero', 'xero'],
logFriends : function(){
var that = this; //relationship1을 가리키는 this를 that에 저장
this.friends.forEach(function(friend){
console.log(that.name, friend);
});
},
};
relationship1.logFriends();
const relationship2 = {
name : 'zero',
friends : ['nero', 'hero', 'xero'],
logFriends(){
this.friends.forEach(friend => {
console.log(this.name, friend);
});
},
};
relationship2.logFriends();
//output
zero nero
zero hero
zero xero
zero nero
zero hero
zero xero
- relationship1.logFriends()안의 forEach문에서는 function 선언문을 사용했다.
- 각자 다른 함수 스코프의 this를 가지므로 that이라는 변수를 사용해서 relationship1에 간접적으로 접근
- relationship2.logFriends()안의 forEach문에서는 화살표 함수를 사용했다.
- 바깥 스코프인 logFriends()의 this를 그대로 사용할 수 있다. 상위 스코프의 this를 물려 받는다.
- 즉, 기본적으로 화살표 함수를 쓰되, this를 사용해야 하는 경우에는 화살표 함수와 function 중 하나를 고르자
구조분해 할당
- 구조분해 할당을 사용하면 객체와 배열로부터 속성이나 요소를 쉽게 꺼낼 수 있습니다.
다음은 객체의 속성을 같은 이름의 변수에 대입하는 코드이다.
var appleMachine = {
status : {
name : 'node',
count : 5,
},
getApple : function(){
this.status.count--;
return this.status.count;
},
};
var getApple = appleMachine.getApple;
var count = appleMachine.status.count;
위와 같은 코드를 다음과 같이 바꿀 수 있다.
const appleMachine = {
status : {
name : 'node',
count : 5,
},
getApple(){
this.status.count--;
return this.status.count;
},
};
const {getApple, status:{count}} = appleMachine;
- appleMachine 객체 안의 속성을 찾아서 변수와 매칭한다. count처럼 여러 단계 안의 속성도 찾을 수 있다.
- 다만, 구조분해 할당을 사용하면 함수의 this가 달라질 수 있다. 달리진 this를 원래대로 바꿔주려면 bind 함수를 따로 사용해야 한다.
배열에 대한 구조분해 할당 문법도 존재한다
var array = ['nodejs', {}, 10, true];
var node = array[0];
var obj = array[1];
var bool = array[3];
다음과 같이 바꿀 수 있다.
const array = ['nodejs', {}, 10, true];
const [node, obj, , bool] = array;
- 세 번째 요소인 10에는 변수명을 지어주지 않았으므로 10은 무시된다.
- 구조분해 할당 문법은 코드 줄 수를 상당히 줄여주므로 유용하다. 특히 노드는 모듈 시스템을 사용하므로 이러한 방식을 자주 쓴다.
본 내용은 Node.js 교과서 (길벗 출판사) 개정 2판의 내용을 기반으로 작성되었습니다.
Comments