有什么办法可以避免在jQuery中使用匿名函数?

Rob*_*Rob 1 javascript jquery anonymous-function

如果我有一大堆这样的代码:

.hover(
        function () {
            hoverState($("#navbar a").index(this),1);
        },
        function () {
            hoverState($("#navbar a").index(this),-1);
});
Run Code Online (Sandbox Code Playgroud)

有没有办法摆脱匿名函数,只是说:

.hover(
    hoverState($("#navbar a").index(this),1),
    hoverState($("#navbar a").index(this),-1);
);
Run Code Online (Sandbox Code Playgroud)

tva*_*son 9

匿名函数的原因是将调用推迟到hoverState,直到发生悬停事件.如果没有一些函数引用,你最终会调用hoverState,函数调用的结果将成为hover方法的参数,这肯定不是你想要的.替代方案是拥有一个命名函数,但这确实没有更好,在某些方面,实际上更糟糕.


ogg*_*ggy 9

不,因为否则你的电话:

hoverState($("#navbar a").index(this),1)
Run Code Online (Sandbox Code Playgroud)

将在调用悬停函数本身的同时进行评估.由于Javascript支持闭包和第一类函数,因此您可以创建一个包装函数:

function wrapper(position){
    function _f(){
        hoverState($("#navbar a").index(this), position);
    }
    return _f;
}
Run Code Online (Sandbox Code Playgroud)

然后使用:

.hover(
    wrapper(1),
    wrapper(-1),
)
Run Code Online (Sandbox Code Playgroud)

但这种方法的好处值得怀疑.