在很长一段时间没有使用过JavaScript后,我一直在玩Node.js。
我注意到的一件事是,我一直在寻找的许多示例文件都使用以下约定:
(function() {
... all javascript code for the file ...
})();
是否有理由将所有JavaScript包含在这样的函数中的文件中,或者只是惯例?这是我应该模仿的吗?
我还应该注意,至少在我一直在玩的文件中,代码的工作方式与使用或不包含所有内容的函数相同。
感谢您的见解!
答案 0 :(得分:32)
Javascript中的变量具有功能范围。您将代码包装在函数中,以便它不会使用大量变量来破坏全局命名空间,这可能会在添加不同代码时导致错误。 E.g:
// module 1
(function () {
var foo = 'bar';
...
})();
// module 2
(function () {
var foo = 'baz';
...
})();
没问题,因为两个模块都有自己的变量范围。
答案 1 :(得分:4)
也许最好将您推荐给一些好的资源
stackoverflow中的相关主题
What are the benefits of a closure, and when are they typically used?
一些细节解释
http://robertnyman.com/2008/10/09/explaining-javascript-scope-and-closures/
或更多:
来自stackoverflow的搜索结果
答案 2 :(得分:1)
最近给出了同样的回答。这是一个匿名函数,它将执行它的主体。
因此,当包含此代码的文件加载此函数内的所有逻辑时,将自行执行。
(function() {
alert('hi');
})();
尝试写这个并执行。此外,您可以将变量置于此函数的范围内,以便它们不会干扰全局范围,并在与其他JavaScript库一起使用时出现错误。
答案 3 :(得分:0)
它创建了一个范围,因此它对于信息隐藏非常有用,而且不会污染全局对象。