함수형 언어는 다음의 개념을 가진다.
일급 함수 (first-class function)함수가 동적으로 리터럴하게 생성되고, argument 또는 다른 함수의 리턴 값으로 사용될 수 있다.
자유 변수 (Free variable)
어떤 함수내에서 사용되는 변수들 중, 그 함수의 로컬변수가 아닌 변수를 말한다.
// Global environment (GE)
var
x = 10;
function
foo(y) {
// environment of "foo" function (E1)
var
z = 30;
function
bar(q) {
// environment of "bar" function (E2)
return
x + y + z + q;
}
// return "bar" to the outside
return
bar;
}
var
bar = foo(20);
bar(40);
// 100
foo는 자유 변수를 가지고 있지 않지만 일급함수 bar가 자유변수 x를 갖는다. 따라서 x를 가지는 parent (전역 유효범위)의 environment를 저장해야 한다.
함수형 언어(JavaScript)는 C언어의 스택매커니즘을 따르면 안된다.
위의 예제와 같이 이너 함수를 리턴으로 넘겨 나중에 bar(40); 으로 호출해 줄 수 있는데,
foo()의 호출이 끝났다고 foo의 environment(로컬변수)를 날려버리면 bar를 호출했을 때 y, z(자유변수)의 값을 알수 없기 때문이다!!!
따라서 함수형 언어는 스택 매커니즘이 아닌 또 다른 매커니즘으로 변수를 다뤄줘야 한다.