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 循环的范围内?
// is 'a' scoped here
for (let a of A) {
// or is 'a' scoped here
}
解决方案
类是 ES6 特性,并且在使用它之前修改变量声明。使用“严格模式”可以实现相同的行为。但是当您将其声明为独立函数时,除非您在脚本开始时自己声明“严格模式”,否则 JS 引擎不会对您的函数施加“严格模式”规则。
推荐阅读
- heroku - Heroku Pipelines:来自 app.json 的配置被忽略
- serial-port - 树莓派-4;pl2303_read_int_callback - usb_submit_urb 失败,结果为 -1
- css - 无限流文字动画CSS
- c# - 将自动售货机界面构建为控制台应用程序但出现错误 - 无法将双精度值转换为布尔值
- java - 使 Spring Boot JSON 枚举反序列化严格,因此它不会默默地将无效值转换为 null
- javascript - Express.js:在调用 next() 后发送结果
- wordpress - 来自 JSON 的 Elementor 插入模板
- python - 为 OpenAI Gym 迷宫环境添加奖品
- amazon-web-services - 将 AWS SES 与电子邮件正文的第三方加密结合使用有哪些可用选项?
- service-worker - 第二个更新服务人员不起作用