함수형 언어는 다음의 개념을 가진다.

일급 함수 (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(자유변수)의 값을 알수 없기 때문이다!!!



따라서 함수형 언어는 스택 매커니즘이 아닌 또 다른 매커니즘으로 변수를 다뤄줘야 한다.






http://dmitrysoshnikov.com/ecmascript/es5-chapter-3-1-lexical-environments-common-theory/#more-1751


분석해보고 정리하겠음.

+ Recent posts