로컬 함수, 일급 함수, 블록 스코프가 한데 어우러지면 다음과 같이 재미난 상황이 연출된다.

    fun returnFunction() {
      var outside = "outside";
      fun inner() {
        print outside;
      }
    
      return inner;
    }
    
    var fn = returnFunction();
    fn();
    

    inner()는 주변 함수8에 선언된 로컬 변수에 액세스한다. 이런 일이 가능할까? 이미 리스프(Lisp)에 있는 이 기능을 많은 언어가 차용했기 때문에 답이 “예”라는 것은 다들 알고 있을 것이다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.