2010-05-28 83 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是一個不錯的閱讀,可能會幫助你理解。