执行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更多关于这个主题的信息
- 相同的线程错误的WebView方法
- scrollIntoView是否可以在所有浏览器中使用?
- Javascript中是否有RegExp.escape函数?
- 造成“angular度未定义”的原因是什么?
- 在JavaScript中通过名称stringdynamic获取全局variables
- Chrome浏览器JavaScriptdebugging – 如何保存页面刷新或通过代码中断之间的断点?
- window.onload vs $(document).ready()
- jasmine:spyOn(obj,'method').CallFake or和.callFake?
- style.display ='none'在chrome中的选项标签上不起作用,但是它在firefox中