我有一个foreach循环,在这里我从firebase提取数据。我想设置一个全局变量来保存“ spotrating”(每个对象的属性)。但是,当我在forEach循环中调用全局变量时,出现错误“无法设置未定义的属性”
当我尝试在代码的每个其他部分中记录全局变量时,它都起作用,但是当我在forEach循环中这样做时,它不起作用
spotrating: any;
稍后在我的代码中
temparr.forEach(function(firebaseSpot) {
console.log(this.spotrating);
});
我希望将spotrating的值打印到控制台,但是我一直在收到错误消息。“无法读取未定义的属性现货评分”
的范围是this
指您的功能,因为您没有使用粗箭头符号。spotrating
在您的函数中未定义。如果要this
引用外部函数(调用它的函数),请使用以下粗箭头表示法。范围界定会咬你。默认情况下,我使用粗箭头,除非我希望回调或函数的范围是该回调或函数。通常我不会。
temparr.forEach(firebaseSpot => {
console.log(this.spotrating);
});
编辑:使用箭头函数实际上并没有像我以前所想的那样改变函数的作用域,我对上面的作用域一词的使用并不完全正确。箭头功能有其自己的范围。
因此,虽然范围不变,但其价值this
却在变化。普通函数创建自己this
的函数,而箭头函数则不如这里所述。
在箭头函数中,这保留了封闭词法上下文this的值。在全局代码中,它将被设置为全局对象
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句