티스토리 뷰
화살표 함수의 추가
const func = function(name){ console.log("hello " + name); }; func("lemon"); //hello lemon
기존의 함수표현식은 위와 같은 형태였습니다. 하지만 똑같은 내용을 화살표 함수로 적으면 어떻게 될까요?
const func = (name) => { console.log("hello " + name); }; func("lemon"); //hello lemon
function이라는 단어도 없애면서, 함수에 매개변수가 하나라면 괄호도 생략하셔도 됩니다. name => {}이라는 형태를 적어도 된다는 뜻입니다. 또 표현식이 하나라면 중괄호와 return도 생략할 수 있습니다.
const func = name => console.log("hello " + name); func("lemon"); //hello lemon
단 한줄로 표현되었습니다. 화살표 함수는 다양한 예제에서 많이 보여지니 형태를 꼭 눈에 익혀두시기 바랍니다.
화살표 함수는 이름을 가질 수 없기 때문에 변수에 할당만 가능합니다.
일반 함수와의 차이점
화살표 함수로는 객체를 만들 수 없습니다. 객체를 만들 필요가 있다면 기존의 방식으로 만들어야 합니다.
그리고 arguments 객체를 사용할 수 없습니다.
function sum(){ return arguments[0] + arguments[1] } sum(1, 2); //3
arguments 객체는 함수의 인수를 참조할 수 있는 객체입니다. 위의 sum이란 함수는 매개변수를 따로 정의하지 않았지만 arguments 객체를 통해 인수를 가져와서 더한 값을 반환합니다.
const sum = () => arguments[0] + arguments[1] sum(1, 2); // 에러가 납니다. const sum2 = (...par) => par[0] + par[1]; sum2(2, 4); //6
화살표 함수에서는 확산연산자를 통해서 나머지 값들을 받아와서 사용하셔야 에러가 나지 않습니다. 마지막 차이는 중첩된 함수에서 this가 가리키는 것이 다르다는 것입니다.
var name = "outer"; var e = { name: "inner", func(){ console.log(this.name); function func2(){ console.log(this.name); }; func2(); } }; e.func();
전역변수 name의 값은 "outer"이고, e라는 객체엔 name 속성의 값을 "inner"로 주었습니다. 그리고 func라는 메소드를 실행하면 name의 값을 묻고 함수를 하나 더 정의하고 실행시킵니다. 함수가 중첩된 것입니다. 그리고 메소드 안에 있는 함수에서 다시 name의 값을 묻습니다. e.func()는 어떻게 나올까요? "inner" "outer"라고 나타날 것입니다.
함수가 중첩되었을 때 this는 전역객체 window나 undefined를 나타내게 됩니다.
스트릭트 모드에서는 undefined가 되고, 아닐 경우 전역객체 window입니다. 하지만 화살표 함수를 사용했다면 어떻게 될까요?
var name = "outer"; var a = { name: "inner", func(){ console.log(this.name); var func2 = () => { console.log(this.name); }; func2(); } }; a.func();
a.func()는 "inner"와 "inner"가 됩니다.
화살표 함수를 사용했을 때는 this가 정확히 a라는 객체를 가리키고 있다는 것을 기억해주세요.
공감은 제작자에게 큰 힘이 됩니다.
'Frontend-dev > HTML-CSS-JS' 카테고리의 다른 글
자바스크립트 클로저(closure) (0) | 2018.02.27 |
---|---|
자바스크립트의 스코프(var, let, const) (0) | 2018.02.24 |
new 생성자로 객체 만들기 (0) | 2018.02.23 |
자바스크립트 함수 (0) | 2018.02.22 |
매개변수에 구조분해 활용 (0) | 2018.02.21 |