2012-01-12 18 views
9

Según lo que he reunido, el primero asigna el valor real de lo que sea que la sentencia return de las funciones sea a la propiedad onload, mientras que la segunda asigna la función real y se ejecutará después de que se haya cargado la ventana. Pero todavía no estoy seguro. Gracias a todos los que puedan dar más detalles.¿Cuál es la diferencia entre window.onload = init(); y window.onload = init;

+1

Sí, esa es exactamente la diferencia. –

+0

UNA vez que dio la definición correcta, no sabemos realmente de qué no está seguro. ¿Cuidado para elaborar? –

+0

Bueno, el libro que estoy leyendo dice que hay una diferencia clara, pero para mí logra exactamente lo mismo. La función se ejecuta después de que se carga la página, ¿cuál es el punto de usar cualquiera de las dos? – Andy

Respuesta

10
window.onload = init(); 

asigna el proceso de carga a lo que es regresaron de la función init cuando es ejecutado. init se ejecutará inmediatamente , (como, ahora, no cuando la ventana se realiza la carga) y el resultado se asigna a window.onload. Es poco probable que nunca quiere esto, pero la siguiente sería válida:

function init() { 
    var world = "World!"; 
    return function() { 
     alert("Hello " + world); 
    }; 
} 

window.onload = init(); 

window.onload = init; 

asigna el proceso de carga a la función init. Cuando el evento de carga se activa, se ejecutará la función init.

function init() { 
    var world = "World!"; 
    alert("Hello " + world); 
} 

window.onload = init; 
+1

¿Algún ejemplo sobre cuándo usar qué? –

+0

Eso tiene sentido, pero supongo que mi pregunta sería, ¿cuál es la diferencia entre la declaración sin el() y la que no? Porque ambos solo se ejecutan cuando la ventana se termina de cargar. – Andy

+0

@Andy - hay una diferencia significativa - He elaborado mi respuesta –

4
window.onload = foo; 

asigna el valor de foo a la propiedad onload del objeto ventana.

window.onload = foo(); 

asigna el valor devuelto llamando foo() a la propiedad onload del objeto ventana. Si ese valor proviene de una declaración de devolución o no depende de foo, pero tendría sentido devolver una función (que requiere una declaración de devolución).

Cuando se produce el evento de carga, si el valor de window.onload es una referencia de función, el controlador de eventos de Windows lo llamará.

1

buenas respuestas, una cosa más que añadir:

tiempos de ejecución de navegador ignoran no-objeto (string, number, true, false, undefined, null, NaN) valores establecidos para los eventos DOM como window.onload. Por lo tanto, si escribe window.onload = 10 o cualquiera de los tipos de valores mencionados anteriormente (incluido el híbrido string), el evento seguirá siendo null.

Lo que es más divertido que los controladores de eventos obtengan cualquier valor de tipo de objeto, incluso window.onload = new Date es un código bastante válido que solicitará la fecha actual cuando inicie sesión en window.onload. :) Pero seguro que no sucederá nada cuando se active el evento window.load.

Por lo tanto, siempre asigne una función a cualquier evento en JavaScript.

Cuestiones relacionadas