¿Por qué el cierre de invocación automática para cargar Javascript FB SDK?

De: http://developers.facebook.com/docs/guides/web/

(function(d, s, id) {
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) {return;}
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.net/en_US/all.js#xfbml=1";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

Preguntas 2:

  1. ¿Por qué se usa el código para cargar el SDK de FB dentro de un cierre de invocación automática?
  2. ¿Qué parte del código realmente hace que el SDK se cargue de forma asíncrona?

preguntado el 03 de mayo de 12 a las 22:05

1 Respuestas

La función se llama a sí misma para no contaminar el espacio de nombres global. Muy fácilmente se podría haber escrito de la siguiente manera:

function loadScript(d, s, id){
    //...
}
loadScript(document, 'script', 'facebook-jssdk');

Pero luego tienes un objeto llamado loadScript flotando en el nivel de alcance global, que entraría en conflicto con cualquier otra biblioteca que también tenga una variable o función llamada loadScript.

Es asíncrono porque inserta un elemento de secuencia de comandos en el DOM de forma dinámica, que es una operación asíncrona. Eche un vistazo a este artículo para una discusión más profunda, http://friendlybit.com/js/lazy-loading-asyncronous-javascript/

Además, eso no es un cierre, ya que no hay una función dentro de la función. Un cierre es una función que mantiene el estado de su entorno. En cualquier caso, esa distinción no es muy importante para esta pregunta.

contestado el 03 de mayo de 12 a las 22:05

Genial, gracias por la clara explicación. Supongo que debería haber dicho "función de autoinvocación" - Hooloovoo13

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.