Javascript ES6失去封闭范围的箭头
您好,我的印象是,如果您使用箭头函数,这指的是下面链接中解释的封闭范围 :Javascript ES6失去封闭范围的箭头,javascript,ecmascript-6,Javascript,Ecmascript 6,您好,我的印象是,如果您使用箭头函数,这指的是下面链接中解释的封闭范围 : ES2015箭头 ES2015规范介绍了的箭头函数语法 编写函数表达式。而且比一般人要简洁 函数表达式,它们也可以有隐式返回和 重要的是,它们总是使用封闭 范围 在下面的示例中,此不是指封闭范围,而是指全局范围 addMeasurement(username,jsonObject){ ... return fetch(measurementURL, { method: 'PATCH
addMeasurement(username,jsonObject){
...
return fetch(measurementURL,
{
method: 'PATCH',
body: jsonStringify
}).then( (res) => {
// this below refers to the global context.
//Instead of the current instance and hence is undefined
this.addMeasurementToAudit(username,jsonObject)
res.json()
});
}
如果不使用箭头并显式绑定,则可以按预期工作:
addMeasurement(username,jsonObject){
...
return fetch(measurementURL,
{
method: 'PATCH',
body: jsonStringify
}).then( function success(res) {
//this refers to the enclosing instance and works as expected
this.addMeasurementToAudit(username,jsonObject)
res.json()
}.bind(this));
},
在
addMeasurement
中的return语句之前,this
指的是什么?这是确切的代码吗?如果是这样&后者有效,那么前者肯定有效。如何调用和定义addMeasurement
?它是在类中还是在对象中?@Mauricioppe它指的是封闭的上下文…例如。电流instance@ShivamSinha这不是完整的函数,因为没有可查看的封闭范围,也没有显示如何调用addMeasurement
。尾随的,
使我认为它是一个对象,但可能不是。这并不是说这会有什么不同,而是可能会让你的大脑更容易复制issue@ShivamSinha:该pastebin代码不是您在此处显示的代码addMeasurementToLocal
是一个函数调用,而不是一个方法调用,类似的东西将是您的问题。另外,在FirebaseRESTUtil.addMeasurement
中,您没有使用箭头函数。