Jquery具有相同变量的多个函数

时间:2015-08-19 11:27:03

标签: javascript jquery

我有以下mouseenter / mouseleave功能:

$('.obj').on('mouseenter', function(){
    var obj_top = $(this).offset().top,
        obj_max = obj_top + 10;
}).on('mouseleave', function(){
    var obj_top = $(this).offset().top,
        obj_max = obj_top + 50;
});

由于这一切都发生在同一个对象中,无论如何我是否可以在整个函数中重用obj_top变量而不必复制它?

2 个答案:

答案 0 :(得分:2)

您不能因为这些变量是声明它们的函数作用域的本地变量,除非您在共享作用域中声明它。

但是如果你不想再重复一次,那么你可以为mouseentermouseleave使用单个事件处理程序,并检查event.type以查看哪个事件是导致触发器根据决定要添加到obj_top的值来查找obj_max

$('.obj').hover(function (e) {
    var obj_top = $(this).offset().top,
        obj_max = obj_top + (e.type == 'mouseenter' ? 10 : 50);
});

答案 1 :(得分:1)

将它移动到一个函数中?

$('.obj').on('mouseenter', function(){
    setVariables(this, 10);
}).on('mouseleave', function(){
    setVariables(this, 50);
});

setVariables = function(sourceElement, amount) {
    var obj_top = $(sourceElement).offset().top,
        obj_max = obj_top + amount;
}
编辑:Arun P Johny是对的,修复了错误的“这个”参考