我在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
的普通func中使用私有成员,但它仍然只对本地范围可见.....所以?
他从封闭中获得了什么?
我会理解,如果他将$
标志发送给该功能......但他没有
答案 0 :(得分:2)
我认为已添加闭包,因此变量originalAddClassMethod
未在全局范围(或父范围)中定义,并且对插件是私有的。
你说:
我可以在普通func中使用私有成员和var,但它仍然只对本地范围可见。
这正是在这里所做的:该函数是匿名的,但仍然是“正常的”。
答案 1 :(得分:2)
如果在函数之外使用var
,您仍然会创建一个全局变量(因为这是您所在的范围)。因此,您需要将所有代码包装在函数中以获得新的范围。
他没有使用该函数来确保$
指向jQuery
但始终使用jQuery
只是意味着他在某种程度上是受虐狂并希望代码不太可读。 ;)