javascript - 这是 javascript Closure 的候选者吗?

标签 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");
    });  
});

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

最佳答案

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

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

现在,this 不会被改变:箭头函数不知道任何上下文绑定(bind),只是坚持词法上下文,这意味着 this 是相同的 thisclick 回调函数中的一样。

关于javascript - 这是 javascript Closure 的候选者吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43193895/

相关文章:

Javascript:正则表达式替换两个字符及其周围的所有空格

javascript - 无法访问对象的属性,但该对象存在

javascript - 更改事件的动态输入复选框

javascript - 如何在 1-arg javascript 函数中使用 2 个参数?

swift - Swift 中转义闭包的一个很好的例子是什么?

javascript - 如何在 Chrome 调试器中调试 ajax 调用后从服务器返回的 javascript

javascript - 有没有一种干净的方法来混合异步和同步数据库查询处理?

javascript - Gravity Forms 未在 https 下加载,未定义 jQuery

jquery - 这种菜单样式叫什么?

c++ - lambda 的捕获变量被重置