执行JavaScript代码的尴尬方式

时间:2014-02-03 13:04:59

标签: javascript

在Google tutorial for implementing Google+ sign-in in Flask application中,我发现开发人员经常使用一种执行JavaScript代码的笨拙方式:

而不是做

var a = foo(bar);

我明白这一点:

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

以奇怪的方式做到这一点的原因是什么?

3 个答案:

答案 0 :(得分:39)

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

var a = (function(){
    var ret = {};
    ret.test = "123";
    function imPrivate() { /* ... */ }
    ret.public = function() { imPrivate(); }
    return ret;
})();

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

有关详细信息,请参阅Why is this function wrapped in parentheses, followed by parentheses?

答案 1 :(得分:10)

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

在这种情况下,这实际上是不必要的,但这没有错,它不会引发错误。

IIF有时使用module pattern

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

在这种情况下,IIF只是module,它会向外部输出内容。

答案 2 :(得分:3)

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

您可以在here under Module Pattern

上找到有关此主题的更多信息