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