함수 표현식

omnigi·2022년 2월 7일
0

Typescript Do it

목록 보기
7/23

함수는 객체다

자바스크립트는 함수형 언어 '스킴(scheme)'과 프로토타입(prototype)기반 객체지향 언어 '셀프(self)'를 모델로 만들어졌습니다. 따라서 자바스크립트는 객체지향 언어와 함수형 언어의 특징이 모두 있습니다. 타입스크립트 또한 자바스크립트의 이런 특징을 모두 포함합니다.

let add = new Function("a", "b", 'return a * b')
let result = add(9, 8)
console.log(result) //72
// function add(a, b){return a + b} 와 같은내용

변수 add가 함수로서 동작한다는 의미

일등함수

일등함수란, 함수와 변수를 구분(차별)하지 않는다는 의미입니다.
프로그래밍 언어가 일등함수(first-class function) 기능을 제공하면 '함수형 프로그래밍 언어'라고 합니다. 자바스크립트와 타입스크립트는 일등함수 기능이 있으므로 함수형 프로그래밍 언어입니다.

let f = function(a, b){return a + b}
//심벌 f 가 변수인지 함수인지 사실상 구분할 수 없다. 이것이 변수와 함수를 차별하지 않는다는 의미입니다.

표현식

프로그래밍 언어에서 '표현식(expression)'이라는 용어는 리터럴(literal), 연산자(operator), 변수, 함수호출(function call)등이 복합적으로 구성된 코드 형태를 의미합니다.

함수표현식

앞에서 작성한 코드의

function(a, b){return a + b}

부분이 함수 표현식 이라고 합니다.

계산법(evaluation)

조급한 계산법(eager evaluation)과 느긋한 계산법(lazy evaluation) 두가지가 있습니다.
컴파일러가 1+2라는 표현식을 만나면 조급한 계산법을 적용해 3이라는 값을 만들고
function(a, b){return a + b}라는 함수 표현식을 만나면 느긋한 계산법을 적용해 계산을 보류합니다.

함수 호출 연산자

어떤 변수가 함수 표현식을 담고 있다면, 변수 이름 뒤에 함수 호출 연산자()를 붙여서 호출할 수 있습니다(함수 몸통부분을 실행한다는 뜻)함수가 매개변수를 요구한다면 함수호출 연산자 ()안에 필요한 매개변수를 명시 할 수 있습니다.

let functionExpression = function(a, b){return a + b}
let value = functionExpression(1, 3) //4

컴파일러는 함수 호출문을 만나면 지금까지 미뤘던 함수 표현식에 조급한 계산법을 적용해 함수표현식을 값으로 바꿉니다.

함수 표현식에 조급한 계산법을 적용한다는 의미는 함수 표현식의 몸통 부분을 실행한다는 의미입니다.

익명함수

함수표현식은 사실 대부분 언어에서 언급되는 익명함수의 다른 표현입니다.
그저 이름이 없는 함수라고만 이해하면 이런 형태의 코드가 어떻게 동작하는지 그 원리를 쉽게 가늠하기 어렵습니다.

let value = (function(a, b){return a + b;}(1, 2)) //3

위 코드를 이해하려면 연산자 우선순위를 고려해 코드를 분해해야 합니다.
함수호출 연산자는 연산자의 우선순위가 매우 높으므로 함수 표현식 부분을 소괄호로 묶어서 컴파일러가 정상적으로 함수 표현식의 시작과 끝 부분을 알 수 있게해야합니다.

let value = 
	(function(a, b){return a + b;}
    (1, 2))
    /// 3 이런식으로 나눠서 이해해야함

const 키워드와 함수 표현식

함수 표현식(익명함수)을 담는 변수는 let보다는 const키워드로 선언하는것이 바람직하다

const f =()=>{}

0개의 댓글