JS惰性函数作为回调函数时不自我更新

发布于 2022-09-05 10:18:15 字数 441 浏览 16 评论 0

将惰性函数传入点击事件作为回调函数,但为什么不会更新,总是执行原来的函数?
只知道把函数赋给其他变量或对象属性来调用会导致不更新
可是作为回调函数,内部有触及以上两点吗? 求解

//显示、隐藏 
        var log = console.log.bind(console)
        var tog = function() {
            log(1)
             $('.box').hide()
            tog = function () {
                log('lljl')
                $('.box').show()
            }
        }

        setInterval(tog,100)
        // $('input').click(tog);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

源来凯始玺欢你 2022-09-12 10:18:15

setInterval()中传入的 tog 是一个引用,引用的是一开始的函数

后来给 tog 重新赋值,所以它引用的函数变量了,但是 setInterval() 中仍然使用的仍然是原来那个函数……

setInterval(tog, 100) 改成 setInterval(function() { tog(); }, 100); 就好

不过我估计你是想制造闪烁的效果,但是有两个问题没处理

  1. show 之后没有把 tog 赋值成 hide 的处理函数
  2. 没有停止的逻辑

写个示例:

//显示、隐藏 
var log = console.log.bind(console);

var timer = 0;

var tog = (function() {
    var count = 0;
    var current = hide;

    function hide() {
        // $(".box").hide();
        log("hide");
        current = show;
    }

    function show() {
        // $(".box").hide();
        log("show");
        current = hide;
    }

    return function() {
        if (count > 10) {
            clearInterval(timer);
        } else {
            current();
            count++;
        }
    };
})();

timer = setInterval(tog, 100);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文