본문 바로가기

프로그래밍/JavaScript

화살표 함수

5Arrow Function Expression

  • 일반적인 function에 비해 구문이 더 짧고 스스로의 this, arguments, super, new.target을 바인딩하지 않는다는 특징이 있다.
  • 화살표 함수는 항상 익명 함수라는 특징을 가지고 있다.
  • 위 특징들때문에 화살표 함수 표현은 메소드 함수가 아닌 부분에 유용하게 쓰일 수 있지만 생성자로는 사용할 수 없다.
var materials = [
    'Apple',
    'Banana',
    'Peach',
    'Orange'
];

console.log(materials.map(material => material.length);

//위 코드를 실행하면 Array [5, 6, 5, 6]이 결과로 나오게 된다.

화살표 함수로 변환 예

- 화살표 함수는 항상 익명함수로 표현해야 한다.

//일반적인 함수 표현
const myFunction = function () {
    ...
}

//화살표 함수 표현
const myFunction = () => {
    ...
}

 


 

- 화살표 함수에는 this를 사용할 수 없다.

//일반적인 함수에서 this의 활용
const button = document.querySelector("#btn");

var myObject = {
    count: 0,
    setCounter: function () {
    	console.log(this.count);
        button.addEventListener("click", (function () {
        	console.log(this.count++);
        }).bind(this));
    }
};

myObject.setCounter();
  • setCounter 함수 실행 결과 0이 출력된다. 
  • 함수에 bind() 메소드를 활용한다면 해당 객체의 속성값인 count를 이벤트와 연결시켜주게 된다.
//화살표 함수 표현
const btn = document.querySelector("#btn");

var myObject = {
    count: 0,
    setCounter: function () {
        console.log(this.count);
        btn.addEventListener("click", () => {
            console.log(this.count++);
        });
    }
};

myObject.setCounter();
  • 화살표 함수에는 스코프상 this자체가 없기 때문에 함수가 선언된 위치상에서 바로 참고하게 되고 
  • setCounter의 첫 익명함수를 화살표함수로 바꿀 경우 this를 활용할 수 없어 count를 늘릴 수 없게 된다.

 

- 화살표 함수는 아규먼트를 가질 수 없다.

//일반적인 함수 표현
const myFunction = function () {
    console.log(arguments);
}

myFunction(1, 2, 3, 4);
  • myFunction을 실행하면 배열을 따로 선언하지 않았음에도 마치 배열인것처럼 callee 등의 속성도 존재하게 된다.
const myFunction2 = () => {
    console.log(arguments);
}

myFunction2(1, 2, 3, 4);
  • 화살표함수로 변환하게 될 경우 아규먼트를 사용할 수 없다는 제약때문에 해당 코드는 오류가 발생한다.
function outterFunc() {
    const myFunction2 = () => {
        console.log(arguments);
    }
}

outterFunc(1, 2, 3, 4);
  • 화살표 함수 밖을 일반 함수로 감싸주게 되면 스코프 체인에 의해 arguments가 outterFunc 함수를 참조하게 되고 첫 번째 함수와 같은 효과를 낼 수 있게 된다.
const myFunction3 = (...arguments) => {
    console.log(arguments);
}

myFunction3(1, 2, 3, 4);
  • 화살표 함수 밖에 일반 함수를 감싸는 방법 외에도 ES6의 문법인 '...변수명'을 통해 배열을 선언해주고 그 변수에 값을 저장해주는 방식을 사용할 수도 있다.
  • 이 방법은 기존의 배열처럼 동작하는 argument와는 달리 실제 배열이라는 차이가 있다.

'프로그래밍 > JavaScript' 카테고리의 다른 글

this  (0) 2019.08.21
클로저와 스코프 체인  (0) 2019.08.21
JavaScript (3)  (0) 2019.08.01
Java Script (2)  (0) 2019.07.12
JavaScript (1)  (0) 2019.07.05