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

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

//显示、隐藏 
        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);
阅读 2.4k
1 个回答

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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题