¿Por qué el cierre de invocación automática para cargar Javascript FB SDK?
Frecuentes
Visto 275 veces
0
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:
- ¿Por qué se usa el código para cargar el SDK de FB dentro de un cierre de invocación automática?
- ¿Qué parte del código realmente hace que el SDK se cargue de forma asíncrona?
1 Respuestas
2
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
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas closures facebook-javascript-sdk or haz tu propia pregunta.
Genial, gracias por la clara explicación. Supongo que debería haber dicho "función de autoinvocación" - Hooloovoo13