2011-12-22 8 views

Respuesta

7

Si quisiera, la función render sería capaz de call itself via render(), sin embargo, render() no es accesible anywhere else.

Además, en un seguimiento de pila, verá render como el nombre de la función, en lugar de .

+2

También se debe decir que hay un error en las versiones anteriores de IE, es decir, que generará dos funciones diferentes para las expresiones de funciones nombradas. –

+0

Muchas gracias por esa explicación; Es un patrón que me ha desconcertado durante un par de meses. –

+1

Esto también se requiere en modo estricto ya que 'arguments.caller' y' arguments.callee' arrojan ambos en lectura, y por lo tanto la función realmente necesita ser nombrada para llamarse a sí misma. –

0

Se necesita para una llamada recursiva.

+0

No es * necesario * pero se puede usar para eso. –

+0

@Felix Kling exactamente :) – yatskevich

0

La primera aparición de render es el nombre del campo de la función se almacena en, por lo que se puede llamar a la función a través de

object.render(context, partials); 

El segundo rendir nombres de la propia función. Luego, las herramientas de depuración muestran render en lugar de solo función.

Una segunda razón posible es que la función podría llamarse recursivamente.

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

Editar: Lo sentimos, he escrito algo realmente mal en la primera revisión.

+0

Sí, tienes razón. Probablemente necesito hacer un descanso. – Yogu

Cuestiones relacionadas