我让这段代码工作。但是,我一直在想这是否是实现闭包的候选者。听我说。
我想这样做:
$(".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
不会被改变:箭头函数不了解任何上下文绑定,只坚持使用词法上下文,这意味着this
与click
回调函数中的this
相同。