执行JavaScript代码尴尬的方式

在Flask应用程序中实现Google+login的Google 教程中 ,我发现开发人员经常使用一种尴尬的方式来执行JavaScript代码:

而不是做

var a = foo(bar); 

我看到这个:

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

奇怪的做法是什么原因?

这是一个不好的例子。 考虑以下:

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

a将包含varible test和public function,但不能访问imPrivate。 这是处理公共和私人variables的常用方法;

请参阅为什么将此函数包装在括号中,然后是括号? 获取更多信息。

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

在这种情况下,这是真的不必要的,但这不是错的,这不是抛出错误。

但有时候IIF使用像module pattern

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

在这种情况下, IIF只是一个外部输出的module

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

您可以在Module Pattern下find更多关于这个主题的信息