传递$作为函数参数(jQuery的)

问题描述:

我碰到这样的代码来了?

感谢

+1

是的,它看起来像一些人过滤东西 – smnbbrv

+0

'$'就像任何其他变量一样:你可以将它作为函数参数传递,或者将它作为外部范围的全局变量。 –

+0

你可以参考这篇文章清楚地了解它[链接](http://stackoverflow.com/questions/10371539/why-define-an-anonymous-function-and-pass-it-jquery-as-the-论据)。它很好地解释了这个话题。 – legend

是不是一样的定义doSomething()jQuery内取出$

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

(function ($){ 

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

}(jQuery)); 

...那么没有,因为在你的问题的版本,doSomething显然是全球性的,而如果在其他函数中定义它,它不是。

你的问题的最终结构是为了防止noConflict模式,$不等于jQuery,通过创建一个函数和调用它,传递jQuery并接受它作为一个名为$参数。这可能是因为笔者不知道的是jQuery的传递到自身的引用到准备回调的事实,因此代码可以更简单地说是:

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

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

第一个功能是关闭了$和套IIFE值为jQuery。它通常用于避免$被别处的其他代码覆盖。

在IIFE内部,$将始终为jQuery,但在IIFE之外,它可能不是。

内部函数$(function() {..只是一个DOM就绪处理程序,它在执行代码之前等待文档加载。

doSomething功能被IIFE外侧限定,并且不具有访问来自IIFE的参数,所以$可能是未定义的或在该范围比jQuery的其它东西,因此作者决定通过$作为参数到doSomething($, $variable),这有点难以阅读,因为传递的值和参数具有相同的名称。