[JavaScript] 일반 함수 vs 화살표 함수

2022. 9. 11. 15:52·JavaScript
반응형

Array Function? 

화살표 함수는 ES6에서 새롭게 추가되었다. 

function fun () {         // 일반 함수
	// ...
}

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

 

화살표 함수 vs 일반 함수 

1. this 

여기서 바인딩이란 말이 많이 나올텐데, 바인딩이란 함수 호출과 실제 함수를 연결하는 방법이다. 

동적 바인딩과 정적 바인딩으로 구분이 가능한데, 

동적 바인딩은 실행 시간에 이루어지거나 실행 시간에 변경된다. 

정적 바인딩은 실행 시간 전에 일어난다. 실행 시간에는 변하지 않는 상태로 유지된다. 

 

일반 함수 

자바스크립트에서 함수는 실행될 때마다 함수 내부에 this라는 객체가 추가된다. 

일반 함수에서 this가 바인딩 되는 상황이 3가지가 있는데, 

 

1. 함수 실행 시 

자바스크립트에서 함수를 호출하면 this는 전역 객체(window)에 바인딩 된다. 

let test = 'This is Test';
console.log(test);          // This is Test

function func() {
    console.log(this.test); // This is Test
}

func()

 

2. 메소드 실행 시

객체의 속성이 함수일 경우 메소드라고 부르는데, 이런 메서드를 호출 시, this는 호출한 객체에 바인딩된다. 

let testObject = {
    name: 'foo',
    sayName: function() {
    	console.log(this.name);  // foo
    }
}

testObject.sayName()

3. 생성자 함수 실행 시

기존 함수에 new 연산자를 붙여서 호출하면 해당 함수는 생성자 함수로 동작한다. 

생성자 함수가 실행되면 함수의 프로토타입 객체를 자신의 프로토타입 객체로 설정한다. 

let Person = function (name) {
    this.name = name
}

let foo = new Person("foo");
console.log(foo.name);      // foo

 

화살표 함수 

화살표 함수는 선언할 때 this에 바인딩할 객체를 정적으로 결정한다.

this를 바인딩할 때, 언제나 상위 스코프의 this를 가리킨다. 

function fun() {
    this.name = "하이";
    return {
    	name: "바이",
        speak: function () {
            console.log(this.name);
        },
    };
}

function arrFun() {
    this.name = "하이";
    return {
    	name: "바이";
        speak: () => {
            console.log(this.name);
        },
    };
}

const fun1 = new fun();
fun1.speak();          // 바이

const fun2 = new arrFun();
fun2.speak();          // 하이

일반 함수를 사용했을 때는 this가 객체에 바인딩 되기 때문에 " 바이 " 가 출력되고, 

화살표 함수는 this가 상위 스코프의 this를 가리키기 때문에 " 하이 " 가 출력된다. 

 

2. 생성자 함수 사용 가능 유무 

일반 함수의 경우에는 생성자 함수를 사용할 수 있다. 

하지만 화살표 함수의 경우 prototype 프로퍼티를 가지고 있지 않기 떄문에 생성자 함수를 사용할 수 없다. 

function fun() {
    this.num = 1234;
}
const arrFun = () => {
    this.num = 1234;
};

const funA = new fun();
console.log(funA.num);     // 1234

const funB = new arrFun(); // Error

 

3. arguments 사용 가능 여부 

일반 함수에는 실행될 때 arguments 변수가 전달되어 사용이 가능하지만, 

화살표 함수는 arguments 변수가 전달되지 않는다. 

function fun() {
    console.log(arguments); // Arguments(3) [[1, 2, 3, ... ]]
}

fun(1, 2, 3);

const arrFun = () => {
    console.log(arguments); // Uncaught ReferenceError: arguments is not defined
};

arrFun(1, 2, 3);
반응형
저작자표시 비영리 변경금지 (새창열림)

'JavaScript' 카테고리의 다른 글

[JavaScript] 콘솔로 입력받기  (1) 2022.09.15
객체 정렬하기  (1) 2022.09.13
[JavaScript] 원하는 크기의 2차원 배열 만들기  (1) 2022.08.11
[JavaScript] ==과 === 차이  (1) 2022.06.20
[JavaScript] 암묵적 타입 변환  (1) 2022.06.19
'JavaScript' 카테고리의 다른 글
  • [JavaScript] 콘솔로 입력받기
  • 객체 정렬하기
  • [JavaScript] 원하는 크기의 2차원 배열 만들기
  • [JavaScript] ==과 === 차이
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    리얼학습일기
    바질 키우기
    영어독학
    CCNA
    덤프
    영어회화
    네이버 부스트캠프
    Babel
    다이소
    Docker
    프로그래머스
    리얼클래스
    ChatGPT
    네트워크
    redux
    ReactNative
    타입스크립트
    javascript
    next.js
    CSS
    react
    자바스크립트
    Node.js
    타일러영어
    알고리즘
    리액트
    typescript
    식물
    바질
    webpack
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
[JavaScript] 일반 함수 vs 화살표 함수
상단으로

티스토리툴바