2011-12-22 4 views

ответ

7

Если бы это было необходимо, функция render могла бы call itself via render(), однако render() не был доступен anywhere else.

Кроме того, в стеке следа вы увидите render как имя функции, а не .

+2

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

+0

Большое вам спасибо за это объяснение; это образец, который меня озадачил уже пару месяцев. –

+1

Это также требуется в строгом режиме, так как 'arguments.caller' и' arguments.callee' оба бросаются на чтение, и поэтому функция на самом деле должна быть названа, чтобы вызвать себя. –

0

Это необходимо для рекурсивного вызова.

+0

Это не * необходимо *, но оно может быть использовано для этого. –

+0

@Felix Kling точно :) – yatskevich

0

Первое из вхождения визуализации является именем поля функции хранится в, так что вы можете вызвать функцию через

object.render(context, partials); 

Второй делает имена самой функции. Затем инструменты отладки отображают рендер вместо функция.

Вторая причина в том, что функция может называть себя рекурсивно.

var render = function render(n) { 
    console.log("render"); 
    if (n < 1) 
     render(n + 1); 
}; 
render(0); 

Edit: К сожалению, я написал что-то на самом деле не так в первой редакции.

+0

Да, вы правы. Наверное, мне нужно сделать перерыв. – Yogu

Смежные вопросы