Javascript와 Function 함수1
자바스크립트를 처음부터 다시 공부해보려고 한다.
함수를 지원하는 일반적인 프로그래밍 언어에서는 아래의 특징을 가지고 있어야 한다.
- 어떤 루틴에서 함수를 호출한다.
- 함수가 호출되어 계산을 수행한다.
- 함수가 종료되고 실행 흐름이 원래의 루틴으로 돌아온다.
Javascript 함수는 다음 과 같은 특징을 가지고 있다.
- 브라우저에서 웹페이지에 진입시 global context 가 생성된다.
- global context 에서 함수를 호출한다.
- 함수가 호출되면, execution context (실행 컨텍스트) 가 생성된다.
- 생성된 execution context 는 execution stack 에 쌓이고, 함수의 계산을 수행한다.
- 함수가 종료되면 execution stack 에서 execution context 를 꺼내고, 이전 context 로 돌아온다.
Javascript 함수 생성
Javascript 에서 함수를 선언하는 방법은 3가지가 존재한다.
- function statement 함수 선언문
- function expression 함수 표현식
- Function 생성자
함수 선언문과 함수 표현식의 차이
Javascript 에서 함수는 값으로 사용할 수 있다.
때문에, 익명의 함수 (anonymous function) 를 정의하고, 이를 변수에게 값으로 전달할 수 있다.
함수 선언문으로 함수를 만든다면 어떻게 될까?
함수 선언문으로 함수를 정의하면, 선언한 시점의 context 의 activation object (활성 객체) 에 함수가 포함된다.
때문에, 함수 호출 시점보다 함수 선언 시점이 이전이라고 해도 해당 함수를 호출할 수 있다.
하지만 함수 표현식으로 함수를 선언하면, 변수에 함수를 할당하는 시점에 activation object 에 함수가 포함되기 때문에, 이전에 호출할 수 없다.
함수의 형태
함수는 값을 입력 받을수 있고 계산에 대한 값을 반환할 수 있다.
Javascript 에 함수 선언시 입력받을 argument 를 정의할 수 있다.
function (argument1, argument2) { }
함수 호출후 반환값을 return 을 이용해서 전달할 수 있다.
만약 return 으로 값을 전달하지 않는다면, undefined 을 전달한다.
return 을 호출하면, 이후에 모든 처리는 일어나지 않는다.
return 은 automatic semicolon insertion (ASI)의 영향을 받기 때문에 만약 return statement 가 없다면 ; 처리된다.
arguments 객체
Javascript에서는 함수에 특별한 arguments 객체가 존재한다.
arguments 객체는 함수에 전달된 인자를 ArrayLike 객체로 존재한다.
Javascript는 매개변수의 유효성을 검사하지 않기 때문에, 변수를 지정하지 않아도 arguments 객체에 포함된다.
Rest 파라미터 (…) 을 사용하기를 권장한다.
재귀 함수
프로그래밍 언어에는 자기 자신을 다시 호출하는 재귀 개념이 존재한다.
Javascript 에도 재귀 함수를 구현할 수 있다.
자바스크립트 엔진에 따라 최대 Call stack 의 제한이 있다.
때문에 너무 깊은 재귀 호출은 stack overflow 를 발생시켜 정상적 동작을 막는다.
자바스크립트 엔진에따라 Tail Call Optimization 가 가능하다.
콜백 함수
Javascript 에서 함수를 값으로 이용할 수 있다.
때문에, 함수 인자로 전달도 가능하다.
이를 이용해 함수형 프로그래밍이 가능하다.
즉시 실행 함수
Javascript에는 즉시 실행 함수 IIFE (Immediately-invoked function expression) 개념이 존재한다.
함수를 선언하자마다 실행할 수 있다.
Arrow Function
ES6 부터 Arrow Function 이 추가되었다.
arrow function 는 항상 익명이며, arguments 객체를 갖지 않는다.