On Mar 14, 2014, at 9:27 AM, John Barton <johnjbar...@google.com> wrote:
> I've used es6 modules for several months now and I'm curious to know when I > would want to leverage mutable bindings. So cycles work! // model.js import View from "view"; export default class Model { ... } // view.js import Model from "model"; export default class View { ... } This kind of thing just falls flat on its face in Node and AMD. > I guess I need to begin to imagine that variables bound to imports are really > a kind of property name of s secret object: If that gets you there, that's cool. But it's a bit sloppy. It blurs userland data structures with internal language implementation data structures. Here's how I think about it. A variable in JS denotes a "binding", which is basically an association with a mutable location in memory. In particular it doesn't denote a value. The binding has a value at any given time. When you export from a module, you're exporting bindings, rather than values. This means you can refactor between module m from "foo"; ... m.bar and import { bar } from "foo"; ... bar and they're fully equivalent. But it also means that when you have modules that mutate their exports during initialization, you don't run into as many subtle order-of-initialization issues as you do with AMD and Node, because importing something syntactically early doesn't mean you accidentally snapshot its pre-initialized state. (Also, keep in mind that the vast majority of module exports are set once and never changed, in which case this semantics *only* fixes bugs.) Dave _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss