0

から: 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'));

2 つの質問:

  1. FB SDK をロードするためにコードが自己呼び出しクロージャ内に使用されているのはなぜですか?
  2. 実際に SDK を非同期にロードするコードの部分はどれですか?
4

1 に答える 1

2

この関数は、グローバル名前空間を汚染しないように自己呼び出しです。次のように非常に簡単に記述できます。

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

しかし、loadScript という名前のオブジェクトがグローバル スコープ レベルで浮遊しているため、loadScript という名前の変数または関数を持つ他のライブラリと競合する可能性があります。

これは、スクリプト要素を DOM に動的に挿入する非同期操作であるため、非同期です。より深い議論については、この記事をご覧ください。

また、関数内に関数がないため、これはクロージャではありません。クロージャーは、その環境の状態を維持する機能です。いずれにせよ、その区別はこの質問にとってそれほど重要ではありません。

于 2012-05-03T21:40:17.277 に答える