为什么在函数中包含javascript文件?

时间:2011-06-29 05:59:40

标签: javascript

在很长一段时间没有使用过JavaScript后,我一直在玩Node.js

我注意到的一件事是,我一直在寻找的许多示例文件都使用以下约定:

(function() {
... all javascript code for the file ...
})();

是否有理由将所有JavaScript包含在这样的函数中的文件中,或者只是惯例?这是我应该模仿的吗?

我还应该注意,至少在我一直在玩的文件中,代码的工作方式与使用或不包含所有内容的函数相同。

感谢您的见解!

4 个答案:

答案 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的搜索结果

https://stackoverflow.com/search?q=javascript+closure

答案 2 :(得分:1)

最近给出了同样的回答。这是一个匿名函数,它将执行它的主体。

因此,当包含此代码的文件加载此函数内的所有逻辑时,将自行执行。


(function() {
alert('hi');
})();

尝试写这个并执行。此外,您可以将变量置于此函数的范围内,以便它们不会干扰全局范围,并在与其他JavaScript库一起使用时出现错误。

答案 3 :(得分:0)

它创建了一个范围,因此它对于信息隐藏非常有用,而且不会污染全局对象。