Я читал, что использование анонимных функций в javascript - это плохая практика, потому что это может затруднить отладку, но я сам этого не видел. Являются ли анонимные функции в JavaScript действительно плохой практикой и, если да, то почему?

26
stevebot 11 Авг 2010 в 23:52

7 ответов

Лучший ответ

Нет, анонимные функции используются повсеместно в JavaScript в Интернете. Это может усложнить отладку в некоторых местах, но этого недостаточно, чтобы сказать, что их не следует использовать.

Например, JQuery широко использует их.

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

12
ColBeseder 11 Дек 2016 в 07:44

Выражения анонимных функций являются лучшими практиками в JavaScript.

-3
adamse 11 Авг 2010 в 19:58

Вот моя консоль браузера:

// Bad
poopy = function(){}
// function (){}
groupy = poopy;
// function (){}

// Good
droopy = function loopy(){};
// function loopy(){}
floupy = droopy;
// function loopy(){}   

Представьте, что вы что-то отлаживаете, и у вас есть имя функции groupy. Вы вводите его имя, чтобы получить больше информации о нем. Если эта функция была установлена как в плохом разделе, вы не представляете, каково было первоначальное объявление. Однако, если вы определите имя своей функции, как в разделе «Хорошо», то у вас всегда будет трассировка исходного имени функции.

0
unflores 14 Апр 2017 в 09:32

Просто потому, что все их используют, не делает их хорошей практикой (все помнят, как использовать элемент table для макета?). Но они великолепны, потому что они могут помочь уточнить и упростить ваш код, предоставляя меньше возможностей для того, чтобы что-то пошло не так.

Но анонимные функции не должны быть настолько сложными, что отладка становится трудной для них. В этом случае, возможно, лучше сделать новую функцию.

4
palswim 11 Авг 2010 в 20:03

Определенно нет, лямбда-функции используются повсюду , почти повсеместно.

5
Jacob Relkin 11 Авг 2010 в 19:55

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

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

7
meder omuraliev 11 Авг 2010 в 19:54

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

1) Анонимные функции не могут быть повторно использованы.

2) Анонимные функции по определению не имеют имени и поэтому не описывают, что они делают. То есть код не самодокументируется.

3) Анонимные функции нельзя тестировать изолированно с модулем модульного тестирования.

4) Я лично считаю, что они затрудняют чтение и отладку кода. Хотя ваш опыт может отличаться.

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

15
bhspencer 11 Фев 2015 в 18:55