2010-05-28 33 views
1

我正在浏览jQuery的源代码。我无法理解jQuery对象的包装策略。组织jQuery对象

(function(window, undefined) { 

    // Define a local copy of jQuery 
    var jQuery = function(selector, context) { 
      // The jQuery object is actually just the init constructor 'enhanced' 
      return new jQuery.fn.init(selector, context); 
     }, 

    .... 
    .... 
    .... 

    // Expose jQuery to the global object 
    window.jQuery = window.$ = jQuery; 

})(window); 

具体来说,我无法理解的是源于第一行。

  1. 什么是最外层的未命名容器功能?为什么需要?

  2. 为什么容器的功能是匿名的?

  3. 什么是需要在最外面的“(”括号?

+2

看到这个问题:) http://stackoverflow.com/questions/2716069/how-does-this-javascript-jquery-syntax-work-function-window-undefined – 2010-05-28 10:30:30

+0

该问题主要是关于'undefined'参数。但似乎有几个链接在那里... – sonofdelphi 2010-05-28 10:39:53

+0

啊,'undefined'。这是令人费解的,不是吗?我不确定它做了什么。也许这是一种确保'arguments'中只有一个项目的方法?所以如果有人引用'arguments',它只有'window'值?只是一个猜测,所以可能是完全错误的。 – Tauren 2010-05-28 19:40:12

回答

1
  1. 外部函数创建一个变量的作用域,IIRC。
  2. 外括号封装的功能。我不他们只是帮助理解
  3. 函数是匿名的,因为它立即被调用:

    (function(w) {...})(window) 
    
1
  1. 外括号防止污染全局窗口对象。

  2. 该容器不一定是匿名的,但没有理由命名它并污染全局。

  3. 由于需要立即执行,所以需要使用外部包装。 (window)使它立即运行,没有parens,它将无法工作。

这个article是一个不错的阅读,可能会帮助你理解。