[JavaScript] 일반 함수(Normal Function) VS 화살표 함수(Arrow Function)
EC6 문법부터 추가된 화살표 함수(Arrow Function)를 이용하여 일반 함수(Normal function)를 대체하여 사용해보고 그 차이는 무엇인지 어느 상황에 맞춰 무엇을 선택하여 사용할지에 대해 알아보자.
- 일반 함수(Normal Function) 사용방법
JavaScript에서는 아래와 같이 함수를 사용할 수 있다. 함수를 선언하기도 하고 변수에다가 함수를 등호기호(=)로 넣어서 함수를 만들 수 있다.
<body>
<h1>Hello JAVASCRIPT</h1>
<script>
function aaa() {
console.log('aaa');
}
var bbb = function (param1, param2) {
return param1 + param2 + 5;
}
aaa();
console.log(bbb(10, 20));
</script>
</body>
- 화살표 함수 (Arrow Function)
function 키워드 대신에 => 를 이용하여 아래와 같이 함수를 표현할 수 있다.
var ccc = () => {
console.log('ccc');
}
var ddd = (param1, param2) => {
return param1 + param2 + 5;
}
ccc();
console.log(ddd(10, 20));
Parameter가 1개 인경우 아래와 같이 소괄호를 생략할 수 있다.
var eee = param1 => {
return param1 + 5;
}
console.log(eee(10));
return문이 1줄인 경우 return 키워드와 중괄호를 생략할 수 있다.
var eee = param1 => param1 + 5;
console.log(eee(10));
- 일반 함수(Normal Function) VS 화살표 함수 (Arrow Function)
Javascript에는 Window라는 global object가 존재하는데 내부적으로는 Javscript 내부에 선언된 변수나 obejct들을 다 포함하고 있다. 그래서 script 내부에서 this 객체를 이용하여 출력해보면 다음과 같이 확인할 수 있다. 그래서 this를 찍어보면 상위 object인 Window를 출력하며 this.aaa 또한 출력이 가능하다.
var aaa = 1;
console.log(this);
console.log(this.aaa);
console.log(aaa);
아래코드는 object 안에 object 를 선언하고 그 안에 일반 함수(Normal Function)과 화살표 함수(Arrow Function) 를 선언 후 this를 콘솔로 확인하였다. 일반 함수를 이용하였을 때는 상위 object인 aaa 객체의 내용을 콘솔로 보여주지만, 화살표 함수의 경우에는 최상위 객체인 Window object의 내용을 보여준다. 그 결과 값으로 'name' 을 출력했을 때 jiurinie와 javascript로 다르게 출력하는 것을 확인할 수 있다.
var name = 'javascript'
var aaa = {
name : 'jiurinie',
normal : function(){
console.log(this);
console.log(this.name);
}
}
aaa.normal();
var bbb = {
name : 'jiurinie',
arrow : () => {
console.log(this);
console.log(this.name);
}
}
bbb.arrow();
이렇게 기존에 사용해온 일반 함수(Normal Function)와 ES6에서부터 사용할 수 있는 화살표 함수(Arrow Function)를 사용해보았다. 사실 일반 함수를 화살표 함수로 대체하여 사용하는데는 크게 무리가 없을 것 같다. 허나 object 내부에 선언된 function의 this를 사용할 때는 차이가 존재하므로 이 점을 주의하여 사용하여야 한다.
'Programming > Javascript' 카테고리의 다른 글
[JavaScript] 계층 구조 데이터에서 특정 노드 찾기 (0) | 2023.06.09 |
---|---|
[JavaScript] 변수 선언 var 대신 let, const를 사용해보자 (1) | 2022.10.31 |
[JavaScript] Array의 sort(), filter(), map() 사용하기 (0) | 2022.09.26 |
[JavaScript] Array와 Object 사용법과 차이 (1) | 2022.09.21 |
댓글