Javascript 为什么';t()=>;是否返回封闭对象?
仅用于上下文,并不重要:我正在使用此代码复制Node.js/Express控制器操作中的一些行为,以用于测试Mocha。我从Javascript 为什么';t()=>;是否返回封闭对象?,javascript,arrow-functions,Javascript,Arrow Functions,仅用于上下文,并不重要:我正在使用此代码复制Node.js/Express控制器操作中的一些行为,以用于测试Mocha。我从status方法返回this的值,用于方法链接(res.status(200).json()用于控制器操作),因此可以在res上调用json方法,因为它是响应对象上的一个Express方法 从我的Mocha测试运行来看,this(res对象)的值似乎在第一个代码段中正确返回,在第一个代码段中,我使用ES6简明方法语法返回this,但在第二个代码段中,我尝试使用箭头函数隐式返
status
方法返回this
的值,用于方法链接(res.status(200).json()
用于控制器操作),因此可以在res
上调用json
方法,因为它是响应对象上的一个Express方法
从我的Mocha测试运行来看,this
(res
对象)的值似乎在第一个代码段中正确返回,在第一个代码段中,我使用ES6简明方法语法返回this
,但在第二个代码段中,我尝试使用箭头函数隐式返回this
。我认为使用arrow函数也会得到同样的结果,因为在arrow函数中,this
的值是封闭的词法范围(在本例中,似乎是res
对象)
按预期工作res
似乎作为status
方法调用的值返回
const res = {
status() {
return this;
},
json: () => {},
};
未按预期工作(res
似乎未作为此
的值返回状态
方法调用):
为什么不()=>此返回封闭对象?Ciao根据:
在箭头函数中,this
保留封闭词法上下文的this
的值。在全局代码中,它将设置为全局对象:
所以基本上,在arrow函数中写入()=>这个
和这个
是一样的。“在arrow函数中,这个
的值是封闭词法范围”-不完全是,它是封闭词法范围中的这个
值。“在本例中,似乎是res
对象”-不,对象文字(即使“包含箭头表达式”)不构成词法范围。
const res = {
status: () => this,
json: () => {},
};
var globalObject = this;
var foo = (() => this);
console.log(foo() === globalObject); // true