在一个函数中返回一个函数时这个被返回的匿名函数没调用

我在学习js实现图片懒加载时,在已经实现了功能后利用函数节流进行性能优化,节流函数为throttle,在滑动滑轮时它会被调用,其中checkImg函数是实现图片加载功能的函数,确保是没有问题的,我现在碰到的问题就是throttle函数在执行时return的匿名函数不执行,所以没法实现节流,我一开始以为是这个匿名函数自己内部的问题,但后来注视了之后就留了一个console.log,也仍旧不执行,我在debug时看过程发现这个代码执行到return时就直接跳到了函数体结尾的}后,也就是没运行这个匿名函数,
代码如下:

function throttle(fn, canRun = 500) {
    console.log("fn:"+fn);
    let previous = null; //上次执行函数的时间
    return function(){
        console.log("11");
        /*var now = new Date(); //当前时间
        var  context = this; //当前上下文
        console.log("this:"+this);
        let args = arguments; //参数数组
        if (!previous)
            previous = now;
        //大于等于间隔时间,则执行一次函数
        if (canRun && (now - previous) >= canRun) {
            fn.apply(this, args); 
            previous = now;
        }*/
    }
}
window.onscroll = function(event) {
    //checxImg函数是实现图片加载功能的函数,我确定它是没有问题的
    throttle(checkImg,500);
    
};

求指点迷津,到底是哪里出了问题呢?
另外求指点fn.apply(this, args); 这句代码的意思,我不是很懂(毕竟这是看别人的博客跟着学的)我的理解是fn它调用自身,但不知道对不对,而且为何要这样做,直接fn()不就好了吗?求指教QAQ....

阅读 2.1k
2 个回答

调用throttle(checkImg,500)只是返回了内部的函数,你还没有调用,肯定不会执行了。
修改为:throttle(checkImg,500)();//调用一下就可以了。

apply 方法的用途都是在特定的作用域中调用函数,实际上等于设置函数体内 this 对象的值。

例子:

function a(arg1){
    alert(arg1+"-"+this.name);
}
var ob = {"name":"zhangsan"};
a.apply(ob,["欢迎"]);//把a方法放在ob的上下文中运行,则this就是指ob对象。
throttle(checkImg,500)();

或者

var throttleResult = throttle(checkImg,500);
throttleResult()
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题