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

Does ES2015 exported class create a closure?

本文关键字:闭包 一个 创建 是否 ES2015      更新时间:2023-09-26

由于它目前是通过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');

我想知道根据规范,这种行为是否正确。

我想知道根据规范,这种行为是否正确

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

请记住,类或多或少只是构造函数+prototype的语法糖。如果你写,你会有同样的问题吗

let foo;
function Bar(){};
Bar.prototype = {
    set foo(value) {
        foo = value;
    }
    get foo() {
        return foo;
    }
};
module.exports = Bar;

相反?