2012-05-03 32 views
0

来源:http://developers.facebook.com/docs/guides/web/为什么自我调用闭包加载Javascript FB SDK?

(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')); 

2个问题:

  1. 为什么使用的代码加载FB SDK自闭调用里面?
  2. 代码的哪部分实际上会使SDK异步加载?

回答

2

该函数是自调用的,以免污染全局名称空间。它可能非常eaisly已被写入如下:

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

但你得叫loadScript在全球范围内的水平左右浮动的物体,这与任何其他库发生冲突也有一个变量或函数称为loadScript。

它是异步的,因为它将脚本元素动态插入到DOM中,这是一种异步操作。看看这篇文章进行更深入的讨论,http://friendlybit.com/js/lazy-loading-asyncronous-javascript/

此外,这不是一个闭包,因为没有函数内的函数。封闭是一种维护其环境状态的功能。无论如何,这个区别对这个问题来说并不是非常重要。

+0

太好了,谢谢你的明确解释。我想我应该说“自我调动功能” – Hooloovoo13

相关问题