> Hi, I'm writing a library for ES5 to add module system like ES6, I just want 
> to confirm some behaviors of ES6 module system:

> module A {
>   export var a = 'a'
>   export function changeA(v) {
>      a = v
>   }
> }

> module B {
>  import * from A
>   console.log(a) // 'a'
>   changeA('a1')
>   console.log(a) // 'a' or 'a1' ?
> }

> Current CommonJS/AMD module system only can return 'a', but I guess
ES6 should return 'a1'?

That's right, the modules proposal exports accessors which can refer to 
captured module local variables.  This is roughly equivalent to what could be 
done in CommonJS today with something like:

// a.js
Object.defineProperty(exports, "a", {get: function() { return a; }})
Object.defineProperty(exports, "changeA", {get: function() { return changeA; }})
var a = 'a'
function changeA(v) {
   a = v
}

> And is there any difference if module A is write as:

> module A {
>   var _a = 'a'
>   export function changeA(v) {
>      a = v
>   }
>   export {a: _a}
> }

This should not work.  There is no value in scope inside the module 'A' with 
the name 'a' here.  The exported name 'a' is only available as a member of the 
module 'A' via 'A.a'.  

Luke


_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to