1

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

如果我放置在 document.ready 函数中,它将与放置在 Closure 中的效果相同,或者我是否需要在 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

什么是首选?谢谢

4

3 回答 3

3

您必须了解 ECMAscript 中的每个函数实际上都是一个闭包。因此,在您创建这些变量的函数(-context)中(除了来自其他上下文的可访问性之外),它并没有真正对您的特定片段产生任何影响。

于 2012-08-02T10:11:00.393 回答
2

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

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

于 2012-08-02T10:10:07.633 回答
1

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

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

于 2012-08-02T10:24:24.480 回答