这是javascript关闭的候选人吗?

时间:2017-04-03 20:43:13

标签: javascript jquery closures

我将此代码运行起来。但是,我一直在考虑这是否是实施关闭的候选者。听我说。

我想这样做:

$(".trigger").click(function() {    
    $(this).parents(".heading").next(".list").slideToggle("slow", function() {
        $(this).toggleClass("close");
        $(this).parents(".heading").toggleClass("close");
    });

});    

执行位于slideToggle函数this旁边的问题似乎并未指向trigger。我找到了一个解决这个问题的工作:

$(".trigger").click(function() {    
    var self = $(this);
    $(this).parents(".heading").next(".list").slideToggle("slow", function() {
        $(self).toggleClass("close");
        $(self).parents(".heading").toggleClass("close");
    });  
});

有效。但我想知道它是否适合实施关闭?并在此过程中提高代码质量。谢谢。

1 个答案:

答案 0 :(得分:3)

封闭在这里并不特别有用,因为它的目标是不同的。但是你可以使用箭头函数的行为,它使用词汇上下文:

$(".trigger").click(function() {    
    $(this).parents(".heading").next(".list").slideToggle("slow", () => {
        $(this).toggleClass("close");
        $(this).parents(".heading").toggleClass("close");
    });
});   

现在,this不会被改变:箭头函数不知道任何上下文绑定,只是坚持词汇上下文,这意味着thisthis相同click {1}}回调函数。