【问题标题】:Why enclose javascript file in a function?为什么将javascript文件包含在函数中?
【发布时间】:2011-09-24 20:55:27
【问题描述】:

在很久没用 JavaScript 之后,我一直在玩 Node.js

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

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

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

我还应该注意,至少在我一直在使用的文件中,无论是否包含围绕所有内容的函数,代码的工作方式都是相同的。

感谢您的见解!

【问题讨论】:

    标签: javascript


    【解决方案1】:

    也许最好向您推荐一些好的资源

    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】:

      它创建了一个作用域,因此对于隐藏信息和不污染全局对象很有用。

      【讨论】:

        【解决方案3】:

        最近给出了相同的答案。这是一个匿名函数,将执行其主体。

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

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

        尝试编写并执行。您还可以将变量放在此函数的范围内,这样它们就不会与全局范围发生冲突,并且在与其他 javascript 库一起使用时会引发错误。

        【讨论】:

          【解决方案4】:

          Javascript 中的变量具有函数范围。您将代码包装在一个函数中,以便它不会用大量变量破坏全局命名空间,这可能会在以后添加不同的代码时导致错误。例如:

          // module 1
          (function () {
              var foo = 'bar';
              ...
          })();
          
          // module 2
          (function () {
              var foo = 'baz';
              ...
          })();
          

          没问题,因为两个模块都有自己的变量范围。

          【讨论】:

          • 感谢您的回答,这就解释了!
          猜你喜欢
          • 1970-01-01
          • 2014-02-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-06
          • 2013-05-14
          • 2014-09-08
          相关资源
          最近更新 更多