我让这段代码正常工作。但是,我一直在想这是否是实现关闭的候选者。听我说。
我想这样做:
$(".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");
});
});
它有效。但我想知道它是否是实现关闭的良好候选者?并在此过程中提高代码质量。谢谢。
最佳答案
闭包在这里并不是特别有用,因为它的目标不同。但是您可以使用箭头函数的行为,它使用词法上下文:
$(".trigger").click(function() {
$(this).parents(".heading").next(".list").slideToggle("slow", () => {
$(this).toggleClass("close");
$(this).parents(".heading").toggleClass("close");
});
});
现在,this
不会被改变:箭头函数不知道任何上下文绑定(bind),只是坚持词法上下文,这意味着 this
是相同的 this
与 click
回调函数中的一样。
关于javascript - 这是 javascript Closure 的候选者吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43193895/