Мы все знаем проблему множества функций javascript и загрязненного глобального пространства имен. Чтобы справиться с этим, я создал шаблон для анонимных функций в качестве переменных для использования на стороне клиента в приложении.

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

Я предполагаю, что вы знакомы с основным использованием анонимной функции в качестве значения переменной:

var имя_функции = (() => { }) ();

К этому мы добавляем некоторое управление инициализацией:

var functionName = (() =› {
let initDone = false;
let loadPrevious;
let init = () = {
if (!initDone) {
initDone = true;

if (functionName.loadPrevious) functionName.loadPrevious();
}}

Добавьте возврат к функции, чтобы выставить внутренние переменные:

возврат {инициализация: инициализация, loadPrevious: loadPrevious)

И после определения функции:

имя_функции.loadPrevious = window.onload; window.onload = имя_функции.init;

Замените … на все, что нужно сделать для инициализации. Любые асинхронные вызовы должны иметь функцию обратного вызова. Вы можете получить от этого какой-то ад обратного вызова, но есть способы справиться с этим (не предмет этого). Вызов loadPrevious должен быть внутри функции обратного вызова, если у вас есть асинхронные вызовы.

Конечно, другие функции могут быть определены (как переменные, чтобы избежать подъема) внутри функции и отображаться с использованием возвращаемого значения.

Этот простой и эффективный шаблон позволил нам создать обширную управляемую среду функционального программирования.