ES2015导出的类是否创建了一个闭包?

时间:2015-11-20 17:48:28

标签: javascript class module closures ecmascript-6

由于它目前是通过Babel + Webpack编译的,因此模块的导出类将创建一个闭包:在模块内部创建的变量将在类实例之间共享。

bar.js

let foo;

export default class Bar {
    set foo(value) {
        foo = value;
    }
    get foo() {
        return foo;
    }
}

app.js

import Bar from './bar.js';

var barOne = new Bar();
var barTwo = new Bar();

barOne.foo = 'quux';
console.assert(barTwo.foo === 'quux');

我想知道这种行为是否符合规范。

1 个答案:

答案 0 :(得分:2)

  

我想知道这种行为是否符合规范。

是。 JavaScript具有词法范围。这不会随着课程而改变。

请记住,类或多或少只是构造函数+ prototype的语法糖。如果你写了

,你会遇到同样的问题吗?
let foo;

function Bar(){};

Bar.prototype = {
    set foo(value) {
        foo = value;
    }
    get foo() {
        return foo;
    }
};

module.exports = Bar;

代替?