执行javascript代码的笨拙方式

Awkward way of executing JavaScript code

本问题已经有最佳答案,请猛点这里访问。

在google关于实现google+登录flask应用程序的教程中,我发现开发人员经常使用一种笨拙的方式来执行javascript代码:

而不是做

1
var a = foo(bar);

我看到这一点:

1
2
3
var a = (function() {
  return foo(bar);
})();

为什么要用这种奇怪的方式?


这是一个糟糕的例子。考虑以下事项:

1
2
3
4
5
6
7
var a = (function(){
    var ret = {};
    ret.test ="123";
    function imPrivate() { /* ... */ }
    ret.public = function() { imPrivate(); }
    return ret;
})();

a将包含变量测试和public函数,但是您不能访问private。这是处理公共变量和私有变量的常用方法;

看看为什么这个函数用括号括起来,后面跟着括号?更多信息。


1
2
3
var a = (function() {
  return foo(bar);
})();

在这种情况下,这确实是不必要的,但这并不是错误的,它不会抛出错误。

但是,IIF有时会像module pattern那样使用:

1
2
3
4
var a = (function() {
  /* some other code in own scope */
  return foo(bar);
})();

在这种情况下,IIF只是一个module,它输出一些外部的东西。


闭包函数用于封装函数中的一些属性/方法。很像其他语言的私有/公共原则。

您可以在模块模式下找到关于这个主题的更多信息。