티스토리 뷰

발생일: 2014.12.01

키워드: coffeescript, 커피스크립트, 네임스페이스, namespace, 전역 변수

문제:
커피스크립트는 컴파일 하면 각 파일이 즉시 실행 함수로 감싸져 있기 때문에,
다른 파일에서 이전 파일의 변수에 접근할 수 없다.

예를 들면, 아래와 같이 두 개의 파일이 있고,

<script src=“Animal.js”></script>
<script src=“main.js”></script>


각 파일은 아래와 같이 되어 있다고 가정해보자.

[Animal.coffee]
class Animal
  # …

[main.coffee]
new Animal # 접근할 수 없다.


`Animal.coffee`는 아래와 같이 컴파일 되기 때문에, `main.js`에서는 이 파일의 변수에 접근할 수 없다.

[Animal.js]
(function () {
  var Animal = ...
}());


앱의 네임스페이스를 설정하거나, 필요에 의해 전역 변수를 설정해야 한다면, 어떻게 잘 해결할 수 있을까?


해결책:

1. 컴파일 할 때, `-b` 또는 `--bare` 옵션을 사용한다. 이 옵션을 사용하면 즉시실행함수로 감싸지 않는다.
2. `@` 키를 사용해서 정의한다. 아래 코드를 보면 이해하기 쉽다.

[Animal.coffee]
class @Animal
  # …

위 코드는 아래와 같이 컴파일된다.

[Animal.js]
(function () {
  this.Animal = … // `this`는 전역 컨텍스트를 가리킨다.
}());
반응형
댓글
공지사항