首页 > 解决方案 > 类方法变量“未定义”

问题描述

我有一堂课

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 循环的范围内?

// is 'a' scoped here
for (let a of A) {
  // or is 'a' scoped here
}

标签: javascript

解决方案


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


推荐阅读