我上课
class People {
constructor(people) {
this.people = people;
}
someMethod () {
for (person of this.people) {
console.log(person);
}
}
}
但是如果我运行这段代码:
let people = new People(['James']);
people.someMethod();
我收到以下错误:
ReferenceError: person is not defined
如果我将自己的someMethod()
实现更改为显式声明person
;
for (let person of this.people)
有效。现在,如果我不是将其创建为类的方法而是将其创建为函数,则无需进行person
的显式声明。
这是什么原因?还有其他可以观察到这种行为的情况吗?因此,是否建议始终在循环中显式初始化临时变量?
当我在for...of
循环中声明变量时,最后一个问题是,该变量属于for循环位于for循环内部还是在for循环范围内?
// is 'a' scoped here
for (let a of A) {
// or is 'a' scoped here
}
答案 0 :(得分:2)
类是ES6的功能,在使用它之前必须先声明变量。使用“严格模式”可以实现相同的行为。但是,当您将其声明为独立函数时,除非您在脚本开始时自行声明“严格模式”,否则JS引擎不会在函数上施加“严格模式”规则。