2011-07-28 15 views
16

Tengo el hábito de iniciar la codificación jquery con la función lista $(function(){...}); y poner todas las funciones llamadas desde lista dentro de listo.

Luego me di cuenta de que algunas de las funciones puestas en la función de listo probablemente no tenían que estar allí.

Por ejemplo, las funciones simples usadas por los acontecimientos en el documento listo podrían ser declarados fuera de ella:

function checkEmail(objelement){ 
    var emailRx = /^([\w-\.][email protected]([\w-]+\.)+[\w-]{2,4})?$/; 
    return emailRx.test(objelement.val()) ? true : false; 
} 

luego se usa dentro de ella:

//code snippet for example 

$(function(){ 

$("form[name='contactform']").submit(function(){ 
    $("input[type=text]").each(function(){ 
     if($(this).attr("id") == "email" && !checkEmail($(this))) { 
      $(this).prev().css("color","red"); 
     } 
    }); 
}); 

}); 

he buscado en muchas preguntas SO anteriores y parece que no puede encontrar una respuesta.

¿Es mejor, peor o no es lo mismo declarar las funciones fuera de listas de esta manera?

Respuesta

15

Si los declara fuera, todo lo que significa es que existen en el ámbito global.

Una ventaja de esto es que pueden reutilizarse fuera de la función document.ready. Una desventaja es que saturan el espacio de nombres global (esto puede evitarse mediante el espacio de nombres, si lo desea).

Personalmente, si los voy a reutilizar, salen afuera. Si necesitan hacer referencia a una variable u otra cosa que solo existirá dentro del alcance de mi controlador domready, entrarán en ella (generalmente como funciones anónimas).

Últimamente, he estado poniendo todo lo que puedo fuera del controlador domready simplemente porque el intérprete tiene que analizar todas las declaraciones de funciones dentro del controlador domready antes de comenzar a ejecutar el controlador y demorar la ejecución de su controlador domready. propósito (independientemente de cuán insignificante sea ese tiempo).

0

las funciones siempre se deben declarar fuera del evento ready o cualquier carga. Pero debe asegurarse de que las funciones estén declaradas antes de usarlas para evitar cualquier error en la ejecución del código.

+1

Todas las funciones declaradas en el encabezado de una página estarán disponibles cuando se desencadene el evento $ (document) .ready(). – BonyT

+2

Lo más importante es que las funciones declaradas en cualquier lugar dentro de un alcance en javascript serán accesibles en el alcance completo (sí, podrías llamar a una función y declararla después) –

+0

+1 para poner eso mejor que yo @VirtualBlackFox – BonyT

6

Mejor

Su código será más fácil de leer.

Recuerde $(document).ready() es solo una función también.

Cualquier cosa que pueda empaquetarse y colocarse en una llamada de función potencialmente reutilizable debería ser.

Piénsalo de esta manera ... ¿harías lo mismo si estuvieras lidiando con un evento de clic de botón?

+0

Quiero votar esto hasta el final de los tiempos – Matt

+0

Soy un bicho raro cuando se trata de mi código y eso es realmente lo que me impulsó a comenzar a mover las funciones en primer lugar. +1 –

Cuestiones relacionadas