【问题标题】:JavaScript and Facebook - syntax explanationJavaScript 和 Facebook - 语法解释
【发布时间】:2011-05-19 10:42:38
【问题描述】:

我对 JavaScript 和 Facebook SDK 完全陌生。有人可以用英语描述以下功能吗:

  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功能以及组件是什么?

【问题讨论】:

    标签: javascript facebook


    【解决方案1】:

    语法有点奇怪。第一位

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

    但这将是内存中的额外代码和额外变量。

    【讨论】:

    • ...和一个全局变量名,众所周知,我们应该避免使用全局变量。
    • 非常感谢。帮助很大。
    • 是的,现在我挑战你区分“jQuery 语法”和“javascript 语法”。我很想知道你实际学到了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2018-06-29
    • 1970-01-01
    • 2011-11-01
    • 2013-11-19
    • 1970-01-01
    • 2017-03-12
    相关资源
    最近更新 更多