2016-10-04 226 views
0

我碰到這樣的代碼來了?

感謝

+1

是的,它看起來像一些人過濾東西 – smnbbrv

+0

'$'就像任何其他變量一樣:你可以將它作爲函數參數傳遞,或者將它作爲外部範圍的全局變量。 –

+0

你可以參考這篇文章清楚地瞭解它[鏈接](http://stackoverflow.com/questions/10371539/why-define-an-anonymous-function-and-pass-it-jquery-as-the-論據)。它很好地解釋了這個話題。 – legend

回答

2

是不是一樣的定義doSomething()jQuery內取出$

如果你的意思,是一樣的:

(function ($){ 

    $(function() { 
    function doSomething($, $variable){ 
    } 
    doSomething($('.div')); 
    }); 

}(jQuery)); 

...那麼沒有,因爲在你的問題的版本,doSomething顯然是全球性的,而如果在其他函數中定義它,它不是。

你的問題的最終結構是爲了防止noConflict模式,$不等於jQuery,通過創建一個函數和調用它,傳遞jQuery並接受它作爲一個名爲$參數。這可能是因爲筆者不知道的是jQuery的傳遞到自身的引用到準備回調的事實,因此代碼可以更簡單地說是:

function doSomething($, $variable){ 
    ... 
} 

jQuery(function($) { 
    doSomething ($, $('.div')); 
}); 
1

第一個功能是關閉了$和套IIFE值爲jQuery。它通常用於避免$被別處的其他代碼覆蓋。

在IIFE內部,$將始終爲jQuery,但在IIFE之外,它可能不是。

內部函數$(function() {..只是一個DOM就緒處理程序,它在執行代碼之前等待文檔加載。

doSomething功能被IIFE外側限定,並且不具有訪問來自IIFE的參數,所以$可能是未定義的或在該範圍比jQuery的其它東西,因此作者決定通過$作爲參數到doSomething($, $variable),這有點難以閱讀,因爲傳遞的值和參數具有相同的名稱。