Функции стрелки ES6 все еще закрываются над «этим», даже если они не используют его?
Я пытаюсь понять правила, когдаthis
лексически связан в функции стрелки ES6. Давайте сначала посмотрим на это:
function Foo(other) {
other.callback = () => { this.bar(); };
this.bar = function() {
console.log('bar called');
};
}
Когда я строюnew Foo(other)
для этого другого объекта устанавливается обратный вызов. Обратный вызов является функцией стрелки, аthis
в функции стрелки лексически связана сFoo
Например,Foo
не будет мусора, даже если я не буду хранить другие ссылки наFoo
вокруг.
Что произойдет, если я сделаю это вместо этого?
function Foo(other) {
other.callback = () => { };
}
Теперь я установил обратный вызов на NOP, и я никогда не упоминаюthis
в этом.Мой вопрос: функция стрелки все еще лексически связана сthis
, сохраняяFoo
жив, покаother
жив, или пустьFoo
быть мусором в этой ситуации?