2012-08-04 60 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