2011-05-19 61 views
0

我完全不熟悉JavaScript和Facebook SDK。有人能用英文描述以下特徵:JavaScript和Facebook - 語法解釋

window.fbAsyncInit = function() { 
    FB.init({appId: 'your app id', status: true, cookie: true, 
      xfbml: true}); 
    }; 
    (function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
     '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
    }()); 

即「閱讀」這種英語的標準方式。 「(function(){」位是我翻倒的地方,我可以看到它在做什麼:在運行這個異步繼續並執行function()中的東西之後,但是這個JavaScript特性是什麼以及什麼是組件?

回答

0

的語法是有點奇怪的第一位

window.fbAsyncInit = function() { 
    FB.init({appId: 'your app id', status: true, cookie: true, 
      xfbml: true}); 
}; 

是一個function expression在其使用的情況下,開發商還可以這樣寫:。

function fbAsyncInit() { 
    FB.init({appId: 'your app id', status: true, cookie: true, 
      xfbml: true}); 
}; 

爲見this JSFiddle無論哪種方式,呼叫是相同的:

fbAsyncInit(); 

以下代碼:

FB.init({appId: 'your app id', status: true, cookie: true, 
      xfbml: true}); 

在調用FB對象上的功能Init以及使object literal作爲參數。

這裏,此位需要多一點的解釋:

(function() { 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
    '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
}()); 

這篇文章可以幫助:What does this JavaScript/jQuery syntax mean?

在JavaScript中所有變量都「吊」到全球範圍,除非他們是在一個功能。您看到的約定是自動調用的匿名函數。我們可以這樣寫:

function MyFunc(){ 
    var e = document.createElement('script'); e.async = true; 
    e.src = document.location.protocol + 
    '//connect.facebook.net/en_US/all.js'; 
    document.getElementById('fb-root').appendChild(e); 
}; 
MyFunc(); 

但是,這將是額外的代碼和額外的變量在內存中。

+0

...和一個全局變量名,我們都知道,我們應該避免使用全局變量。 – Christian 2011-05-19 10:54:56

+0

非常感謝。非常有幫助。 – RichieHH 2011-05-19 12:42:18

+0

是的,現在我挑戰你區分「jQuery語法」和「javascript語法」。我很想知道你實際學到了什麼。 – Christian 2011-05-19 13:49:21