为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

森林海 2018-12-12 18:14:26
将惰性函数传入点击事件作为回调函数,但为什么不会更新,总是执行原来的函数?只知道把函数赋给其他变量或对象属性来调用会导致不更新可是作为回调函数,内部有触及以上两点吗? 求解//显示、隐藏         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);
查看完整描述

1 回答

?
米琪卡哇伊

TA贡献1998条经验 获得超6个赞

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


查看完整回答
反对 回复 2019-01-15
  • 1 回答
  • 0 关注
  • 473 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信