Вопрос о замыканиях, утечках памяти и цепочке областей видимости - PullRequest
0 голосов
/ 17 июня 2020

Хотя я какое-то время использую замыкания, я все еще в тумане по поводу некоторых вещей.

  1. Есть ли разница между передачей глобально инициализированного объекта как параметр для функций внешней и / или внутренней области видимости по сравнению с ссылкой на объект непосредственно из глобальной области? Я спрашиваю, потому что вижу все 3 реализации в различных сценариях и учебных пособиях.

  2. Может ли какая-либо из этих реализаций вызвать утечку памяти?

  3. Какая реализация лучшая практика?

const obj = {
  breakfast: 'Earl Grey',
  lunch: 'croissant',
  dinner: 'Ten Forward'
};

// Example #1 
const closure = () => () => obj.dinner = 'Saurian Brandy';
const test = closure();
test();

console.log( obj );

/*
{
  breakfast: 'Earl Grey',
  lunch: 'croissant',
  dinner: 'Saurian Brandy'
}
*/

Я не совсем понимаю, почему глобально инициализированный объект должен быть передан в качестве параметра, поскольку он уже доступен для внешней и внутренней областей, но я вижу тем не менее следующее ...

//#Example #2
const closure = obj => obj => obj.dinner = 'Saurian Brandy';
const test = closure();
test(obj);

console.log( obj );

/*
{
  breakfast: 'Earl Grey',
  lunch: 'croissant',
  dinner: 'Saurian Brandy'
}
*/

//#Example #3
const closure = () => obj => obj.dinner = 'Saurian Brandy';
const test = closure();
test(obj);

console.log( obj );

/*
{
  breakfast: 'Earl Grey',
  lunch: 'croissant',
  dinner: 'Saurian Brandy'
}
*/

Пояснения были бы очень признательны. Спасибо.

...