더북(TheBook)

예제 1-1 코드 조각을 다시 보자.


rj3.svg.line = function() { 
var getX = function(point) {
       return point[0];
    },
    /*** var 선언문 줄임 ***/
 
function line(data) {
  var segments = [],
      /*** 다른 변수 줄임 ***/ 
  function segment() {
     segments.push("M",interpolate(points));
  }
 
  while (++i < n) {
      d = data[i];
      points.push([+getX.call(this,d,i), +getY.call(this,d,i)]);
  }
 
  if (points.length) {
      segment();
  }
 
  return segments.length ? segments.join("") : null;
  }
 
  line.x = function(funcToGetX) {
    if (!arguments.length) return getX;
    getX = funcToGetX;
    return line;
  };

 

내부 line 함수에 멤버 함수 line.x가 있다. xline의 멤버임에도 segments 같은 line의 지역 변수는 볼 수 없지만, 에워싼 함수 안에서 lineline.xgetX 변수를 바라볼 수 있다. 이런 식으로 클로저를 교묘하게 잘 섞어 쓰면 대규모 자바스크립트 시스템에 꼭 필요한, 강력한 도구가 된다.

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