2012-08-04 55 views
1

可有人請解釋這段代碼至極的我嘗試deceifer 它仍然看起來很滑稽我理解jQuery的Facebook登錄插件語法

因爲我需要Facebook的洛logic..and還因爲我想明白了什麼代碼does..scopewise等。

至極功能第一次運行時,一個外或內一個 這是編寫插件代碼的另一種方式..

var openid = { 


},doJsFacebookLogin: function (a) { 
     window.FB.login(function (b) { 
      b.authResponse && (b = "https://stackoverflow.com/users/oauth/facebook/js?accessToken=" + encodeURI(b.authResponse.accessToken), 
      a && (b += "&returnUrl=" + encodeURI(a)), window.location = b) 
     }, openid.facebook_login_params) 
    }, 

還做什麼逗號」在體內代表功能?

facebookLogin: function (a, b, c) { 
     c || ($("." + b).css("cursor", "wait"), openid.facebook_app_id ? openid.doJsFacebookLogin() : (this.setOAuthInfo(a.oauth_version, a.oauth_server), c || $("#openid_form").submit())) 
    }, 
etc... 

感謝理查德..

回答

1

哪個功能第一次運行中,外的一個或當外一個運行內層一個

,它調用內層一個。

這基本上是沒有什麼不同的,比方說

function foo() { 
    alert("bar"); 
} 

- 你自己會在你的代碼某處調用foo(),然後該函數調用窗口對象的alert方法帶來了一個小消息,說「酒吧」。

這個逗號在體內代表什麼?

這僅僅是一個不實際上有單聲明並用分號分隔的方式 - 但使用表達代替,只是用逗號分隔它們。 (它本身就是JavaScript中的一個操作符,但它只是表示一系列表達式,它並不以任何方式在邏輯上連接它們。)

只要語句也爲有效表達式生成,去做;儘管在這種情況下我沒有發現實際的好處 - 如果單個表達式的結果在邏輯上由其他邏輯運算符合併爲f.e,則會有所不同。 & &或||,然後這個整個表達式的值將被用作該函數的返回值,以便調用它的其他函數/代碼部分可以以這種方式確定函數的成功或失敗。

如果您不熟悉JavaScript中實際構成表達式的內容,請在此處查找示例http://lib.ru/JAVA/javascr/expr.html#expr(或放入您選擇的JS書籍中)。

+0

非常感謝你的解釋,只是對代碼最後一個,我看不出有什麼代碼塊這一關...},openid.facebook_login_params)..我只是看到一個右括號至極顯然是在外部功能的身體? – Richard 2012-08-04 18:31:50

+0

的'}'關閉「內」功能的功能體(這是一個「匿名」的功能,因爲它沒有分配給它的名字),以及')'然後關閉被賦予參數列表函數window.FB.login。所以它實際上是函數window.FB.login的調用,它的第一個參數是一個匿名函數,第二個參數是一個「openid.facebook_login_params」對象。 [...] – CBroe 2012-08-04 19:39:01

+1

[續]]將函數引用作爲參數傳遞給另一個函數稱爲「回調函數」 - 當「外部」函數完成必須完成的操作時,它會調用「內部」函數,通常會給它一些參數它本身就是創建/請求的。在JavaScript中這是一個非常普遍的概念,特別是當涉及到異步工作流時(這通常是使用Facebook API方法時的情況,因爲他們必須發出HTTP請求,這需要一些時間 - 否則瀏覽器的用戶界面將會「凍結」直到請求完成)。 – CBroe 2012-08-04 19:40:04