Хотя я какое-то время использую замыкания, я все еще в тумане по поводу некоторых вещей.
Есть ли разница между передачей глобально инициализированного объекта как параметр для функций внешней и / или внутренней области видимости по сравнению с ссылкой на объект непосредственно из глобальной области? Я спрашиваю, потому что вижу все 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'
}
*/
Пояснения были бы очень признательны. Спасибо.