这是javascript闭包的候选者吗?



我让这段代码工作。但是,我一直在想这是否是实现闭包的候选者。听我说。

我想这样做:

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

当执行在函数this slideToggle侧时的问题似乎并不指向trigger。我找到了解决这个问题的方法:

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

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

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

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

现在,this不会被改变:箭头函数不了解任何上下文绑定,只坚持使用词法上下文,这意味着thisclick回调函数中的this相同。

最新更新