【发布时间】:2017-08-28 20:47:52
【问题描述】:
我让这段代码工作。但是,我一直在考虑这是否是实施关闭的候选者。听我说。
我想这样做:
$(".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");
});
});
它有效。但我想知道它是否是实施关闭的好人选?并在此过程中提高代码质量。谢谢。
【问题讨论】:
-
你认为闭包是什么?
-
为什么
this会指向另一个函数中被点击的元素?您是否阅读过slideToggle的文档?在回调this内将是滑动的元素。 -
如果
self已经是$(this),为什么还要将self包裹在$()中? -
第二个例子很好(除了重新包装^),我不知道你如何定义一个闭包,从技术上讲你已经有了一个,但你肯定不需要另一个。
-
当你在 slideToggle 函数中说 $(this) 时,$(this) 指的是正在调用什么 slideToggle,所以在这种情况下 next(".list") 不是什么你要。您的解决方法很好,或者,如下面的回答,使用 es6 魔法
标签: javascript jquery closures