본문 바로가기
javascript

화살표 함수

by hjcode 2019. 10. 24.
// ES5의 함수 표현식
var es = function(){
	console.log('hello');
}

es(); // 'hello'

// ES6의 화살표 함수 표현식
let es = () => {
	console.log('hello');
}

es(); // 'hello'

 

함수내의 처리문이 하나면 중괄호를 생략할 수 있습니다.

 

let es = () => console.log('hello');
es(); // 'hello'

 

매개변수를 전달받아 리턴하는 과정도 간단해집니다.

 

// ES5의 매개변수 전달, 리턴
var add = function(a,b){
	return a + b;
}

console.log( add(1,4) ); // 5

// ES6의 매개변수 전달, 리턴
let add = (a,b) => {
	return a + b;
}

console.log( add(1,4) ); // 5

 

마찬가지로 처리문이 하나면 중괄호를 생략합니다.

 

let add = (a,b) => a + b;

console.log( add(1,4) ); // 5

화살표 함수의 this

let obj = {
	num: 5,
   add1: function(a){
   	console.log(this.num + a, this);
   },
   add2: (a) => {
   	console.log(this.num + a, this);
   }
}

obj.add1(5);
obj.add2(5);

아래와 같은 결과가 나옵니다.

 

 

add1은 객체 내의 변수를 참조하지만 add2는 그 바깥쪽인 window 전역객체를 가르키므로 

원하는 값을 리턴하지 못합니다.

this는 부모 객체를 바라봐야하는데 클로저가 생성되면 this가 바라보는 대상이 전역으로 변경되는 것과 비슷합니다.

 

let obj = {
	num: 5,
   add1: function(a){
   	console.log(this.num + a, this);
      
      function inner(a){
      	console.log(this.num + a, this); // NaN, window
      }
      inner(5);
   }
}

obj.add1(5); // 10, Object

 

화살표 함수를 사용하면 클로저에서 잘못된 this를 함수 범위내로 바라볼 수 있게 바꿀 수 있습니다.

 

let obj = {
	num: 5,
   add1: function(a){
   	console.log(this.num + a, this);
      
      let inner = (a) => {
      	console.log(this.num + a, this);
      }
      inner(5);
   }
}

obj.add1(5);

 

 

 

반응형

'javascript' 카테고리의 다른 글

filter() 함수  (0) 2019.11.01
map() 함수  (0) 2019.10.28
로컬스토리지 예제  (0) 2019.10.21
퀴즈 만들기  (0) 2019.10.18
ES6의 클래스  (0) 2019.10.17