Там вообще проверка на браузер, она, так, «для вида», чтобы неофитов не пугать ошибками.
Предполагалось, что знающий человек, понявший смысл вопроса, попробует запустить без неё.
Решение понятное. Оно хорошее.
Думаю, что не менее успешно можно просто воспользоваться промежуточным объектом.
К сожалению, это не совсем то, что нужно.
1. Есть необходимость проинициализировать внутри функции кучу переменных.
2. Таких функций — десяток (пока).
3. Можно просто написать функцию, возвращающую объект с проинициализированными переменными, собственно, так и сделано.
Хотелось сделать «заморочено и страшно», так, чтобы внутри функции «всплывали» эти самые переменные. Например:
1. Объявляем одну из «наших» функций: var test_n_n = function(){
2. На второй строчке пишем вызов к функции-инициализаторше: define_our_vars();
3. После исполнения этого вызова, начиная с третьей строчки функции test_n_n, будут доступны переменные, которые были объявлены внутри Scope define_our_vars(), при этом все они «существуют» только в рамках Scope для " define_our_vars" и «test_n_n».
Сейчас на месте второй строчки конструкция:
var Object_For_Variables = define_our_vars();
Соответственно «define_our_vars» просто возвращает объект, конечно, при этом он виден только внутри «test_n_n», так что глобальный Scope девственно чист…
Да, это просто, понятно, и вполне юзабельно, и «хороший тон».
Но, хотелось как нибудь красиво «поиграться», чтобы, например, алгоритмически написать следующую логическую конструкцию:
А начиная с этого места у нас будет присутствовать пачка переменных, которые мы дальше можем использовать, несмотря на то, что для них раньше не было даже объявления.
Примерно так: define new variables for this local scope ().
Возможно, можно «поиграться», и передать текущий «this», т.е. функцию «test_n_n» в «define_our_vars», например так:
define_our_vars.call(test_n_n);
а уже потом вызвать test_n_n внутри define_our_vars.
При этом, конечно, внутри test_n_n должна быть «обертка», обрабатывающая логику так:
1. Если test_n_n вызвана напрямую, то «пере_вызвать» её через define_our_vars.call(test_n_n)
2. Иначе — просто исполнить её код, т.к. все нужные переменные есть.
Получается, что нужно уже как бы три функции. Инициализационная, Обёрточная, и, непосредственно та, которую вызывают. Может быть здесь, как раз, помог бы «decorator pattern». Но, что-то пока у меня мозгов не хватило как это можно сделать.
Там вообще проверка на браузер, она, так, «для вида», чтобы неофитов не пугать ошибками.
Предполагалось, что знающий человек, понявший смысл вопроса, попробует запустить без неё.