이 영역을 누르면 첫 페이지로 이동
Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

페이지 맨 위로 올라가기

Nuhends 의 Tech Life

IT / Tech / 재테크 관련 뉴스를 최대한 알기 쉽게 전달하는 Tech 블로그 입니다.

[JS] 문법 정리 > 함수: 선언, 호이스팅, 일급 객체

  • 2020.12.20 17:54
  • 프로그래밍/JAVASCRIPT 사전
반응형

[JS] 문법 정리 > 함수: 선언, 호이스팅, 일급 객체

JS 문법정리 > 함수(1)

 


 

 

Javascript 는 다중 프로그래밍 패러다임이다.

 

패러다임의 종류

1) 절차적 프로그래밍
    - 조건문
    - 분기분
    - 반복문
    - 프로시져
2) 함수형 프로그래밍
    - 함수는 1급 객체
    - 고차 함수
    - 익명 함수
3) 객체지향 프로그래밍
    - 객체 생성
    - 객체 상속
    - 다형성

 

Javascript 에서는 모든 것을 함수가 책임진다.

 


함수 선언 방법

함수를 선언하는 방법에는

함수 선언식, 함수 표현식, Function 생성자 함수 총 3가지 방법이 있다.

 

1. 함수 선언식 (function statement)

function name(arg) {
    // ...
    return "반환값";
}

- JS에서는 함수도 일반 객체처럼 값으로 취급되기 때문에, 함수 리터럴 을 이용해 함수를 생성할 수 있음

- 반드시 함수명이 정의되어 있어야 함

 

2. 함수 표현식 (function Expression)

// add() 함수 표현식
var add = function (x, y) {
    return x + y;
}

var plus = add;

add(3, 4);
plus(5, 6);

- JS 에서는 함수가 일급 객체 이므로, 숫자나 문자열처럼 변수에 할당하는 것이 가능

- 할당한 변수는 함수 리터럴로 생성한 함수를 참조하는 함수 변수이고, 함수 이름이 아님

- 함수 변수 add 는 함수의 참조값을 가지고 있으므로, 또 다른 변수 plus 에도 그 값을 할당 가능

 

2-1 익명함수와 기명함수

var add = function sum(x, y) {
    return x + y;
};

console.log(add(2, 3));  // (출력값) 5
console.log(sum(3, 4));
// (출력값) Uncaught ReferenceError: sum is not defined 에러 발생

- sum() 함수 호출시 에러가 발생 → 함수 표현식에서 사용된 함수 이름이 외부 코드에서 접근 불가능

- 함수 표현식에서 사용된 함수 이름이 사용되는 경우

    - 정의된 함수 내부에서 해당 함수를 재귀적으로 호출 할 때

    - debugger 에서 함수를 구분할 때

 

3. Function() 생성자 함수

new Function(arg1, arg2, ..., functionBody)

// 예제
var add = new Function('x', 'y', 'return x + y');

console.log(add(3, 4));    // (출력값) 7

- arg1, arg2, ..., argN : 함수의 매개 변수

- functionBody : 함수가 호출될 때 실행될 코드를 포함한 문자열

    - js 에서는 실행소스 코드를 string 형태로 불러와 실행이 가능하다 → 런타인 코드평가

 

@. 화살표 함수 (Syntax Sugar)

const func = (arg) => {
    // ...
    return '반환값';
}

// 축약 가능
const func = arg => '반환값';

- 여러가지 선언 방식이 있지만, 일종의 Syntax Sugar

- 결론적으로 모두 Function 객체의 인스턴스이다. (but 동작 방식에는 차이가 있음)

 


함수 호이스팅 (Function Hoisting)

함수 선언 3가지 방법마다 동작방식의 차이가 있음

이 때문에 더글라스 크락포드의 [자바스크립트 핵심 가이드] 에서는  함수 표현식만 사용할 것을 권장하고 있다.

 

add(2, 3);      // 5

// 함수 선언문 형태로 add() 함수 정의
function add(x, y) {
    return x + y;
}

add(3, 4);     // 7

- 첫번째 줄에서 add 함수가 정의되지 않았음에도 에러가 나지 않고, 호출 가능 

- 즉, 함수 선언식 형태에 정의한 함수의 유효 범위는 코드의 맨 처음부터 시작된다. 이것을 호이스팅 이라고 부른다.

 

add(2, 3);      // uncaught type error

// 함수 선언문 형태로 add() 함수 정의
var add = function (x, y) {
    return x + y;
}

add(3, 4);     // 7

- 함수 표현식 형태 정의에서는 호이스팅이 일어나지 않는다.

 

호이스팅이 발생하는 원인을 변수 생성 과 초기화의 작업이 분리되서 일어나기 때문

이는 실행 컨텍스트와 클로저 포스팅 에서 다시 다룰 예정.

 


일급 객체로서의 함수, 함수도 "객체" 다

자바스크립트에서 함수도 객체 이다.

즉, Object 를 상속하는 객체이므로, 평범한 객체가 가진 모든 성질을 가지고 있다.

 

- 리터럴에 의해 생성 가능

- 변수나 배열의 요소, 객체의 프로퍼티 등에 할당 가능

- 함수를 반환(return) 할 수 있음

- 함수를 인자(arg)로 전달 가능

- 동적으로 프로퍼티를 생성 및 할당 가능

 

이와 같은 특징이 있으모로 자바스크립트에서는 함수를 일급(First Class) 객체 라고 부른다.

// 함수 선언식 방식
function add(x, y) {
    return x + y;
}

// 객체 생성
var obj = {}

// add() 함수 객체에 프로퍼티 추가
add.result = add(3, 2);
add.status = 'OK';

// obj 객체에 프로퍼티 추가
obj.method = add;

console.log(add.result);    // (출력값) 5
console.log(add.status);    // (출력값) 'OK'

console.log(obj.method(2, 9))    // (출력값) 11

var foo = function(func) {
    // 인자로 전달받은 func() 함수 호출
    func(3,6);
};

foo(add);  // 9

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'프로그래밍 > JAVASCRIPT 사전' 카테고리의 다른 글

[JS] 화살표 함수, 쉽고 빠르게 정리하기  (8) 2021.05.11
[YOU DON'T KNOW JS 정리] THIS (1)  (4) 2021.05.08
[JS] arguments 객체 그리고 유사배열 객체  (0) 2021.05.05
[JS] 문법정리 > 확실한 프로토타입 체이닝 정리  (0) 2020.12.29
[JS] 문법정리 > 타입과 변수  (0) 2020.12.09

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [YOU DON'T KNOW JS 정리] THIS (1)

    [YOU DON'T KNOW JS 정리] THIS (1)

    2021.05.08
  • [JS] arguments 객체 그리고 유사배열 객체

    [JS] arguments 객체 그리고 유사배열 객체

    2021.05.05
  • [JS] 문법정리 > 확실한 프로토타입 체이닝 정리

    [JS] 문법정리 > 확실한 프로토타입 체이닝 정리

    2020.12.29
  • [JS] 문법정리 > 타입과 변수

    [JS] 문법정리 > 타입과 변수

    2020.12.09
다른 글 더 둘러보기

정보

Nuhends 의 Tech Life 블로그의 첫 페이지로 이동

Nuhends 의 Tech Life

  • Nuhends 의 Tech Life의 첫 페이지로 이동
반응형

검색

메뉴

  • 홈
  • 웹 개발
  • 경제 데이터
  • 경제 공부
  • 방명록

카테고리

  • 분류 전체보기 (127)
    • 프로그래밍 (69)
      • React (3)
      • HTML&CSS 사전 (13)
      • JAVASCRIPT 사전 (11)
      • Algorithm (23)
      • 이슈 정리 (2)
      • 개발 환경 (4)
      • NodeJS (1)
      • Typescript (4)
      • NextJS (5)
      • React-Query (2)
      • 인프라 (0)
      • ai (1)
    • 경제 데이터 (22)
      • 주식 순위 (20)
      • 경제지표 (2)
    • 경제 공부 (25)
      • 경제 신문 읽기 (3)
      • 세금 재테크 (7)
      • 인사이트 (4)
      • 경제용어정리 (9)
      • 정부 지원 제도 관련 (2)
    • 팁 모음 (11)
      • 인터넷 (5)
      • 생활 (3)
      • SNS 맛집 (3)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 프로그래머스
  • 알고리즘
  • softeer
  • 코딩테스트
  • 코테 풀이
  • javascript
  • 코테
  • 자바스크립트

나의 외부 링크

정보

nuhends의 Nuhends 의 Tech Life

Nuhends 의 Tech Life

nuhends

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © nuhends. Designed by Fraccino.

티스토리툴바