예제 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가 있다. x는 line의 멤버임에도 segments 같은 line의 지역 변수는 볼 수 없지만, 에워싼 함수 안에서 line과 line.x는 getX 변수를 바라볼 수 있다. 이런 식으로 클로저를 교묘하게 잘 섞어 쓰면 대규모 자바스크립트 시스템에 꼭 필요한, 강력한 도구가 된다.