js 썸네일형 리스트형 꼬리재귀(tail-recursion)와 꼬리 호출 최적화(TCO) 재귀함수를 사용할 때는 콜스택 증가로 인한 메모리 낭비, stack overflow 발생 위험을 조심해야 한다.이 때 재귀함수를 꼬리재귀 형태로 작성할 수 있다면 이 문제를 회피할 수도 있다. 몇몇 언어에서(특히 함수형 언어)는 꼬리 호출 최적화(TCO: Tail-Call Optimization)를 지원하기 때문이다.꼬리재귀(tail-recursion)재귀함수의 리턴값이 재귀호출의 반환값인 상황을 꼬리재귀라고 한다.꼬리 호출 최적화 (TCO: Tail call optimization)TCO(Tail call optimization)는 꼬리재귀 함수 호출시 스택 프레임을 재사용하는 최적화 방식이다. 스택에 쌓인 호출 정보를 새로운 호출에 대한 것으로 업데이트하여 메모리 사용량을 줄일 수 있다.꼬리 호출 최.. 더보기 프로그래밍 언어의 기본 요소 프로그래밍언어는 일련의 과정에 관한 생각들을 조직화하는 틀로써 작용할 수 있다. 단순한 아이디어(or 매커니즘)들을 조합해서 복잡한 아이디어를 조직하는 것이다. 강력한 컴퓨팅 언어들은 다음 세가지 매커니즘을 제공한다. 원시 표현식(primitive expression) 수단 언어와 관련한 가장 단순한 객체 조합(combination) 수단 여러개의 단순한 요소들을 이용하여 복합적인 요소를 만듦 추상화(abstraction) 수단 복합적 요소에 이름을 붙여 하나의 단위로 다룸 표현식 표현식은 원시표현식, 연산자 조합으로 구성될 수있다. 원시 표현식 number, bigint, string, null, undefined, boolean, Symbol 연산자 조합 피연산자 + 연산자 표현식 형태의 조합 이름 .. 더보기 함수 표현식 vs 함수 선언식 vs 화살표 함수 함수 표현식 var myFunction = function [name]([params]) { statement }; 이름을 생략하면 익명함수를 만들 수 있다. 정의하자마자 실행되는 IIFE(즉시 호출되는 함수 표현식)로 사용될 수 있다. 함수 선언식과 달리 호이스팅 되지 않는다. (변수 이름만 호이스팅되고 함수의 정의는 호이스팅되지 않는다) 따라서 함수 표현식은 정의하기 전에는 사용할 수 없다. 함수 선언식 function name([params]) { [statements] } 함수 선언식은 선언을 둘러싼 함수의 최상부나 전역범위로 호이스팅된다. 화살표 함수 ([parmas]) => { statements } ([params]) => expression // { return expression; }과 .. 더보기 이전 1 2 다음