Javascript варто уникати стилю написання коду - функція в функції stack overflow російською

Особливість цього шаблону в тому, що всі допоміжні функції знаходяться всередині основної.

Другий плюс даного підходу в тому, що він дозволяє едінижди зібрати всі DOM-об'єкти через функцію jQeury (). а потім вже звертатися до них через імена змінних (якщо це коректно називати кешуванням DOM-елементів, то можна сказати, що даний шаблон коду створює умови для забезпечення кешування DOM-елементів).

І ще: це випливає з назви функції, але все ж уточню, що сама функція initHeader () викликається тільки один раз (це можна зробити в HTML-коді відразу після закриває . наприклад), а внутрішні функції вже можуть бути викликані скільки завгодно раз.

Наведіть, будь ласка, аргументи за і / або проти такого підходу.

заданий 21 Січня о 1:15

Прошу вибачення. Це випливає з назви функції, але все ж я повинен був сказати, що сама функція initHeader () виконується тільки один раз, наприклад її можна викликати після HTML-коду шапки, тоді функція виконається після виведення шапки в браузер. Всі допоміжні функції можуть бути викликані в будь-який момент (приклад допоміжної функції - обробник кнопки пошуку в шапці). - Gurebu Bokofu 21 січ в 3:49

Хіба він при цьому не передбачає, що це повинні бути чисті функції?

Така структура, яку я показав, позбавляє нас від необхідності передавати аргументи, при цьому всі змінні, будучи оголошеними усередині initHeader (). за межами даної функції недоступні.

А ось це мені здається взагалі прямо протилежним рекомендації про функції.

Я вважаю, що в більшості випадків іменовані функції повинні отримувати те, з чим працюють, через параметри.

Вкладені функції створюють замикання, а замикання дійсно дозволяє зробити "щось" недоступним, але чи потрібно так взагалі робити? Дуже часто люди вживають в одному реченні такі слова як замикання-інкапсуляція. інкапсуляція-приватність. приватність-захист якихось даних від зловмисників. Ні, це неправильно! Інкапсуляція пропонує приховувати роботу з більш низькорівневим api і дуже часто пропонує це реалізовувати за допомогою синтаксичного цукру модифікаторів доступу, до яких відноситься і private. Модифікатори доступу в свою чергу створені щоб захиститися від найстрашнішого ворога коду - розробника, але не для приховування даних, які підмінить або вкраде зловмисник. Це просто вигадки, адже зловмисником не потрібно змінювати Ваш код щоб щось вкрасти.

Справжня мета замикання, це захист глобального простору від засмічення всім чим тільки його можна засмітити.

Але ж Ви задали конкретне питання і напевно хочете почути на нього відповідь.

Вкладені функції, це причина нечитаності коду. Вкладені функції, це причина витоків. Вкладені функції при кожному виклику свого контексту створюються заново. Вкладені функції при цьому бувають дуже зручними в малих дозах.

Можливо, хтось ще додасть аргументів і це Вам допоможе визначиться з вибором.

Коли-небудь Ви як зазвичай сядете писати код і Вас осяє почуття, що сьогодні Ви вперше написали так, як колись Новомосковсклі про це в розумній книжці. І саме такі моменти зривають пелену нерозуміння і відкривають нові простори для роздумів і усвідомлення того, як потрібно писати. За одну частку секунди Ви розумієте дуже велику частину інформації, яка до цього Вам здавалася просто набором незв'язаних слів. Але до цього моменту намагайтеся слухати тільки здоровий глузд, який якщо говорить що тут і зараз буде зручно написати три аргументи, то значить потрібно писати три аргументи. Чи не вивертайте себе навиворіт якщо так велить якась людина який написав книгу. Він сорок років навчався і говорить про те що на самому початку винесло б мозок і йому так, нібито це зрозуміло всім. Але це цілком нормально і можна пробачити.

І особисто я раджу подивитися в сторону класів, вони набагато корисніше ніж про них розповідають ті, хто пише на react і на frp забуваючи що вони наскрізь пронизані класами.

відповідь дан 27 Січня о 8:20

Так, поясніть, будь ласка. Взагалі-то я роблю так, як Ви говорите. Якісь зовсім вже загальні функції типу отримання часу в бажаному форматі виношу в окремий файл. У тому прикладі, що я привів, у нас є основна функція initHeader () і кілька допоміжних простих функцій, але вони мають відношення тільки до шапки. Ми зараз обговорюємо, що робити саме з цими функціями - оголосити їх усередині основної, або ж поза нею. У другому випадку доведеться передавати аргументи, а також кожного разу заново проводити ресурсовитратності процедуру захоплення DOM-елементів всередині функцій. - Gurebu Bokofu 22 січ в 2:21