猿问

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);


森林海
浏览 474回答 1
1回答

米琪卡哇伊

setInterval()中传入的 tog 是一个引用,引用的是一开始的函数后来给 tog 重新赋值,所以它引用的函数变量了,但是 setInterval() 中仍然使用的仍然是原来那个函数……把 setInterval(tog, 100) 改成 setInterval(function() { tog(); }, 100); 就好不过我估计你是想制造闪烁的效果,但是有两个问题没处理show 之后没有把 tog 赋值成 hide 的处理函数没有停止的逻辑写个示例://显示、隐藏 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);
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答