我需要将此函数作为DOM事件的回调传递
var fooo = function() {
$(this).append("foo");
fooo = function() {
$(this).append("bar");
};
};
$("#hover").hover(fooo);
此示例应在“ foo”之后添加“ bar”,但是不起作用。我究竟做错了什么?
JSFiddle
最佳答案
您正在更改分配给fooo
的函数,而不是分配给.hover
的回调的函数。
为了清楚起见,当您传递函数作为事件的处理程序时(例如$().hover(fooo)
的情况),您不是在传递fooo
的变量,而是传递它指向的函数。如果您将fooo
重新分配给其他内容,原始函数仍将作为事件处理程序绑定。
如果我想做您想做的事,那么我将使用稍微不同的范例。就像是
var fooo = (function() {
var altBehavior = false;
return function() {
$(this).append(altBehavior ? "bar" : "foo");
altBehavior = true;
}
})();
$("#hover").hover(fooo);
实际的绑定函数永远不会更改,但是它所存在的上下文会更改。