在Google tutorial for implementing Google+ sign-in in Flask application中,我发现开发人员经常使用一种执行JavaScript代码的笨拙方式:
而不是做
var a = foo(bar);
我明白这一点:
var a = (function() {
return foo(bar);
})();
以奇怪的方式做到这一点的原因是什么?
答案 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)
闭包函数用于封装函数中的一些属性/方法。很像其他语言的私人/公共原则。
上找到有关此主题的更多信息