类方法变量“未定义”

时间:2019-02-21 11:52:52

标签: javascript

我上课

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
}

1 个答案:

答案 0 :(得分:2)

类是ES6的功能,在使用它之前必须先声明变量。使用“严格模式”可以实现相同的行为。但是,当您将其声明为独立函数时,除非您在脚本开始时自行声明“严格模式”,否则JS引擎不会在函数上施加“严格模式”规则。