如何修复 foreach 循环中的 cannot read 属性 错误

How to fix cannot read property error in foreach loop

我有一个 foreach 循环,我从 firebase 获取数据。 我想设置一个全局变量来保存 "spotrating"(每个对象的 属性)。 但是当我在 forEach 循环中调用全局变量时,我得到一个错误 "cannot set property spotrating of undefined "

当我尝试在代码的每个其他部分记录全局变量时,它起作用了,但是当我在 forEach 循环中记录它时,它不起作用

spotrating: any;

稍后在我的代码中

temparr.forEach(function(firebaseSpot) {
        console.log(this.spotrating);
 });

我希望将 spotrating 的值打印到控制台,但我一直收到错误。 "cannot read property spot rating of undefined"

this 的范围指的是你的函数,因为你没有使用粗箭头符号。 spotrating 未在您的函数中定义。如果您希望 this 引用外部函数(调用它的函数),请使用如下粗箭头符号。范围界定会咬你。我默认使用粗箭头,除非我希望回调或函数的范围是那个回调或函数。通常我不会。

temparr.forEach(firebaseSpot => {
        console.log(this.spotrating);
 });

Docs

编辑:使用箭头函数实际上并没有像我以前认为的那样改变函数的范围,我对上面范围这个词的用法并不完全正确。箭头函数有自己的作用域。

因此,虽然范围没有改变,但 this 的值正在改变。普通函数创建自己的 this 而箭头函数并不像描述的那样 here.

In arrow functions, this retains the value of the enclosing lexical context's this. In global code, it will be set to the global object