我有一个异步功能:
async function f() {
...
}
我还有存储功能的对象:
const functions = {};
functions['f'] = f;
两者之间有区别吗?
await f();
和:
await functions['f']();
答案 0 :(得分:4)
this
的值有所不同。当将函数作为方法调用时,this
将是被调用的对象。否则它将是全局对象,或在严格模式下为undefined
。
(async function() {
async function f() {
console.log(this === functions);
}
const functions = {};
functions['f'] = f;
await f();
await functions['f']();
})();
有关更多信息,请参见MDN on this
。
要强制使用“独立”功能的上下文,可以将功能bind()
移至原始对象:
const f = functions.f.bind(functions);
现在,当调用f()
时,this
将始终为functions
。