我试图理解为什么我可以从我的班级formOptions
访问该对象formValidate
。
我的意思是,我仍然可以像Python语言一样思考,但在我看来,这不应该具有访问权限,因为我们需要为formOptions
对象提供类构造函数。
const formOptions = {
defaultValue: "Write:",
colorFocus: "red",
errorSize: 15
};
class formValidate {
constructor(form) {
this.form = form;
console.log(formOptions);
}
}
你能解释一下课程的工作范围吗?
答案 0 :(得分:0)
formOptions
和formValidate
共享相同的外部范围。在JavaScript中,传统是词汇范围(功能范围),我们可以说它们与范围链处于同一级别。
ES6确实引入了块范围,尤其是const
和let
。但显然,你没有得到它...... const
没有创建一个本地范围。它只存在于已定义的块范围内。如果你想要隔离你的formOptions
,你可以使用旧的技巧并将你的常量封装在一个函数中:
function foo() {
const formOptions = {
defaultValue: "Write:",
colorFocus: "red",
errorSize: 15
};
}
class FormValidate {
constructor(form) {
this.form = form;
// ReferenceError
console.log(formOptions);
}
}
let fv = new FormValidate();

但是因为const
是块作用域,所以它也适用于任何块。以下是一些例子:
{
const formOptions = {
defaultValue: "Write:",
colorFocus: "red",
errorSize: 15
};
}
class FormValidate {
constructor(form) {
this.form = form;
// ReferenceError
console.log(formOptions);
}
}
let fv = new FormValidate();

if (true) {
const formOptions = {
defaultValue: "Write:",
colorFocus: "red",
errorSize: 15
};
}
class FormValidate {
constructor(form) {
this.form = form;
// ReferenceError
console.log(formOptions);
}
}
let fv = new FormValidate();

for (let i = 0; i < 3; i++) {
const formOptions = {
defaultValue: "Write:",
colorFocus: "red",
errorSize: 15
};
}
class FormValidate {
constructor(form) {
this.form = form;
// ReferenceError
console.log(formOptions);
}
}
let fv = new FormValidate();
&#13;