ES2015 exported class 是否创建闭包?
Does ES2015 exported class create a closure?
因为它目前是通过 Babel + Webpack 编译的,模块的导出 class 将创建一个闭包:模块内部创建的变量将在 class 个实例之间共享。
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');
我想知道这种行为是否符合规范。
I wonder if this behavour correct according to the spec.
是的。 JavaScript 有词法作用域。这不会随着 类.
而改变
请记住,类 或多或少只是构造函数 + prototype
的语法糖。如果你写
,你会不会有同样的问题
let foo;
function Bar(){};
Bar.prototype = {
set foo(value) {
foo = value;
}
get foo() {
return foo;
}
};
module.exports = Bar;
代替?
因为它目前是通过 Babel + Webpack 编译的,模块的导出 class 将创建一个闭包:模块内部创建的变量将在 class 个实例之间共享。
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');
我想知道这种行为是否符合规范。
I wonder if this behavour correct according to the spec.
是的。 JavaScript 有词法作用域。这不会随着 类.
而改变请记住,类 或多或少只是构造函数 + prototype
的语法糖。如果你写
let foo;
function Bar(){};
Bar.prototype = {
set foo(value) {
foo = value;
}
get foo() {
return foo;
}
};
module.exports = Bar;
代替?