js节流函数问题

var throttle = function(fn, interval) { //fn为要执行的函数,interval为延迟时间
  var _self = fn,  //保存需要被延迟执行的函数引用
      timer,  //定时器
      firstTime = true;  //是否第一次调用
  return function() { //返回一个函数,形成闭包,持久化变量
    var args = arguments, //缓存变量
        _me = this;
    if(firstTime) { //如果是第一次调用,不用延迟执行
      _self.apply(_me, args);
      return firstTime = false;
    }
    if(timer) { //如果定时器还在,说明上一次延迟执行还没有完成
      return false;
    }
    timer = setTimeout(function() { //延迟一段时间执行
      clearTimeout(timer);
      timer = null;
      _self.apply(_me, args);
    }, interval || 500);
  };
};
//使用
window.onresize = throttle(function() {
  //你要执行的代码
}, 500);

在网上看到的一个节流函数。
有点不太懂,上面的var args = arguments, //缓存变量这里的arguments指的是什么。

阅读 3.4k
4 个回答

下面有个调用arg啊

_self.apply(_me, args); //这里如果用arguments就是匿名函数的了

arguments函数内部的一个类数组对象,包含着传入函数中的所有参数。

arguments就是参数的类数组形式,给你举个小例子你就知道了。
clipboard.png
你可以用arguments[0], arguments[1], arguments[2]分别取到值1,2,3

arguments
为return返回函数的参数,保证在后期可以传入参数,使用arguments

window.onresize = throttle( function(){
            console.log( arguments );
        },500 ).bind(1,3);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题