【问题标题】:Jquery - namespaces and closuresJquery - 命名空间和闭包
【发布时间】:2012-08-02 10:07:35
【问题描述】:

我正在创建一些我想从全局命名空间中隐藏的自定义对象和函数(包括限制其可访问性)。

如果我放置在 document.ready 函数中,它是否与放置在闭包中的效果相同,或者我是否需要在 document.ready 声明中为 jquery 引用设置别名以确保我的自定义代码不在全局命名空间中?

选项 1. 准备好普通文档

$(document).ready(function()
   //do custom stuff

选项 2:准备好关闭内部文档

  $(document).ready(function(){
       (function($) {
         //do custom stuff
       })(jQuery);

选项 3:为文档中的 jquery 引用别名

jquery(document).ready(function($) { 
    //do custom stuff

什么是首选?谢谢

【问题讨论】:

    标签: javascript jquery closures


    【解决方案1】:

    您必须了解,ECMAscript 中的 每个 函数实际上都是一个闭包。因此,它对您的特定 sn-ps 并没有任何区别,您在哪个函数(-context)中创建这些变量(除了来自其他上下文的可访问性)。

    【讨论】:

      【解决方案2】:

      如果您在任何函数中声明变量,它们将仅在该函数中可见。

      另外,为了确保您的范围内有正确的 $,我会选择选项 3(但将函数名称从 jquery 更正为 jQuery)。选项 1 和 2 已经假定 $ 是正确的别名,但选项 3 将起作用,即使外部范围内的 $jQuery 不同(例如,如果调用了 jQuery.noConflict() 或另一个库像 Prototype.js 等一样加载),但使 $ 在你的内部范​​围内总是意味着 jQuery //do custom stuff

      【讨论】:

        【解决方案3】:

        在 JavaScript 中,每个函数都有自己的作用域,您在函数内部声明的任何对象或变量都只会被函数本身或其中声明的其他函数看到。

        创建命名空间的最常见方法是创建一个函数,该函数在定义后自动调用,并返回一个包含数据的对象,就像在您的第二个选项中一样。然后可以通过该对象访问所有数据。在任何情况下,如果您只想隐藏代码其他部分的变量,只需创建一个函数并声明您想要隐藏的所有内容。

        【讨论】:

          猜你喜欢
          • 2015-11-15
          • 1970-01-01
          • 2015-11-15
          • 1970-01-01
          • 2012-04-04
          • 1970-01-01
          • 2021-08-09
          • 2014-01-15
          • 2015-06-22
          相关资源
          最近更新 更多