Являются ли анонимные функции плохой практикой в ​​JavaScript? - PullRequest
22 голосов
/ 11 августа 2010

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

Ответы [ 7 ]

12 голосов
/ 11 августа 2010

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

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

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

11 голосов
/ 11 февраля 2015

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

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

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

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

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

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

7 голосов
/ 11 августа 2010

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

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

5 голосов
/ 11 августа 2010

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

4 голосов
/ 12 августа 2010

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

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

0 голосов
/ 14 апреля 2017

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

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

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

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

0 голосов
/ 11 августа 2010

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

...