Suponha que escrevamos classe em helloworld.coffee:
class HelloWorld
constructor: () ->
console.log("Hello world!");</code></pre>
And we want call it in another file main.coffee:
hello = new HelloWorld()</code></pre>
The result is an error:
ReferenceError: Can not find variable: HelloWorld</code></pre>
All CoffeeScript output is wrapped in an anonymous function: (function(){ ... })(); This safety wrapper, combined with the automatic generation of the var keyword.
Thus, our class will be compiled into the following JavaScript code:
(function(){
var HelloWorld;
HelloWorld = (function() {
function HelloWorld() {
console.log("Hello world!");
}
return HelloWorld;
})();
})();</code></pre>
Obviously, our variable is visible only inside the wrapper and we must change context. For example:
class window.HelloWorld
constructor: () ->
console.log("Hello world!")</code></pre>
It will be compiled into the following JavaScript code:
(function(){
window.HelloWorld = (function() {
function HelloWorld() {
console.log("Hello world!");
}
return HelloWorld;
})();
})();</code></pre>
Now you can call this class from anywhere.<br/>
coffeescript lexical scope