render: function render(context, partials) {
return this.r(context, partials);
},
Данный код из новой библиотеки hogan.js Twitter для демонстрации проблемы; Какова цель именования функции дважды?Именованные функции объектов объекта
render: function render(context, partials) {
return this.r(context, partials);
},
Данный код из новой библиотеки hogan.js Twitter для демонстрации проблемы; Какова цель именования функции дважды?Именованные функции объектов объекта
Если бы это было необходимо, функция render
могла бы call itself via render()
, однако render()
не был доступен anywhere else.
Кроме того, в стеке следа вы увидите render
как имя функции, а не .
Это необходимо для рекурсивного вызова.
Это не * необходимо *, но оно может быть использовано для этого. –
@Felix Kling точно :) – yatskevich
Первое из вхождения визуализации является именем поля функции хранится в, так что вы можете вызвать функцию через
object.render(context, partials);
Второй делает имена самой функции. Затем инструменты отладки отображают рендер вместо функция.
Вторая причина в том, что функция может называть себя рекурсивно.
var render = function render(n) {
console.log("render");
if (n < 1)
render(n + 1);
};
render(0);
Edit: К сожалению, я написал что-то на самом деле не так в первой редакции.
Да, вы правы. Наверное, мне нужно сделать перерыв. – Yogu
Следует также сказать, что в старых версиях IE есть ошибка, а именно, что он будет генерировать две разные функции для именованных функциональных выражений. –
Большое вам спасибо за это объяснение; это образец, который меня озадачил уже пару месяцев. –
Это также требуется в строгом режиме, так как 'arguments.caller' и' arguments.callee' оба бросаются на чтение, и поэтому функция на самом деле должна быть названа, чтобы вызвать себя. –