* Update package versions; remove marked * Revise docs to use Markdown-It: tables are now GitHub-Flavored Markdown tables, avoid hack of blockquoted code blocks * Add anchors for sub-sections * Add syntax highlighting to uneducable code blocks; fix missing italics variant for comments font * Update docs about breaking changes in Literate CoffeeScript, move Breaking Changes section below Literate CoffeeScript section * Update docs regarding destructuring default values breaking change * Update changelog, with spitball release date for beta1 * Fix highlight function return statement
2.2 KiB
Unsupported ECMAScript Features
There are a few ECMAScript features that CoffeeScript intentionally doesn’t support.
let
and const
: Block-Scoped and Reassignment-Protected Variables
When CoffeeScript was designed, var
was intentionally omitted. This was to spare developers the mental housekeeping of needing to worry about variable declaration (var foo
) as opposed to variable assignment (foo = 1
). The CoffeeScript compiler automatically takes care of declaration for you, by generating var
statements at the top of every function scope. This makes it impossible to accidentally declare a global variable.
let
and const
add a useful ability to JavaScript in that you can use them to declare variables within a block scope, for example within an if
statement body or a for
loop body, whereas var
always declares variables in the scope of an entire function. When CoffeeScript 2 was designed, there was much discussion of whether this functionality was useful enough to outweigh the simplicity offered by never needing to consider variable declaration in CoffeeScript. In the end, it was decided that the simplicity was more valued. In CoffeeScript there remains only one type of variable.
Keep in mind that const
only protects you from reassigning a variable; it doesn’t prevent the variable’s value from changing, the way constants usually do in other languages:
const obj = {foo: 'bar'};
obj.foo = 'baz'; // Allowed!
obj = {}; // Throws error
get
and set
Keyword Shorthand Syntax
get
and set
, as keywords preceding functions or class methods, are intentionally unimplemented in CoffeeScript.
This is to avoid grammatical ambiguity, since in CoffeeScript such a construct looks identical to a function call (e.g. get(function foo() {})
); and because there is an alternate syntax that is slightly more verbose but just as effective:
codeFor('get_set', 'screen.height')