2011-11-28 75 views
1

我看到jQuery中的一些插件代码jquery插件语法解释?

其中之一是重载jQuery中的addClass方法(例如:当您添加类 - 调用myfunction())。

(function(){ 

    var originalAddClassMethod = jQuery.fn.addClass; 

    jQuery.fn.addClass = function(){ 
     // Execute the original method. 
     originalAddClassMethod.apply(this, arguments); 

     // call your function 
     // this gets called everytime you use the addClass method 
     myfunction(); 

    } 
})(); 

我不明白的东西:

他为什么要创建一个封闭?

我可以在var的正常功能中使用私人成员,它仍然只对本地范围可见..... so?

你能解释一下吗?

他从那个关闭中赚了多少钱?

我会明白,如果他送的$标志的功能......但他没有

回答

2

我想加入的封闭使可变originalAddClassMethod在全球范围内没有定义(或父范围),并且该插件是私有的。

你说:

我可以使用私有成员正常FUNC内用var,它仍然是只在局部范围内可见。

这正是这里所做的:函数是匿名的,但仍然是“正常的”。

+0

我认为这种语法的主要目标是使用里面的$符号..(他没有)...不是? –

+1

@Royi - 你说得对,'(function($){})(jQuery);'在插件中很常见,但是这里的代码并没有使用'$'变量,所以它并不是真的需要。 – Kobi

+0

@RoyiNamir:该语法通常用于两个原因; a)确保'$'指向jQuery,并且b)提供一个可以定义私有变量的范围。在这种情况下,正如\ Kobi指出的那样,作者对(b)使用闭包;没有定义闭包1)其他第三方代码可能会覆盖我们的'originalAddClassMethod'声明,或者我们可以覆盖它们。 – Matt

2

如果在函数的外部使用var,您仍然创建一个全局变量(因为这是您所在的范围)。所以你需要将所有的代码包装在一个函数中来获得一个新的范围。

事实上,他没有使用该功能来确保$指向jQuery,而是一直使用jQuery,而不是仅仅意味着他以某种方式受虐狂,并且希望代码不易读。 ;)