Взяв, например, инфраструктуру jQuery, если вы запускаете такой код:
$(document).ready(function init() { foo.bar(); });
Трассировка стека, полученная в Firebug, будет выглядеть так:
init()
anonymous()
anonymous([function(), init(), function(), 4 more...], function(), Object name=args)
anonymous()
anonymous()
Как видите, он не очень читабелен, потому что вам нужно нажимать на каждую функцию, чтобы узнать, что это такое. Анонимные функции также отображаются в профилировщике как (?)()
, что может привести к ошибке " не может получить доступ к оптимизированному закрытию ". Мне кажется, это веские причины избегать их. Кроме того, существует тот факт, что ECMAScript 5 устареет arguments.callee
в его строгом режиме, что означает, что с ним невозможно будет ссылаться на анонимные функции, что делает их чуть менее ориентированными на будущее.
С другой стороны, использование именованных функций может привести к повторению, например ::
var Foo = {
bar: function bar() {}
}
function Foo() {}
Foo.prototype.bar = function bar() {}
Правильно ли я считаю, что это повторение оправдано с точки зрения удобства отладки, предоставляемого именованными функциями, и что преобладание анонимных функций в хороших средах, таких как jQuery, является упущением?