可能会遇到的一些操作

  1. 节流函数
  • 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);
    

2. 防抖        

  • function debounce(fn, interval, immediate) {
      //fn为要执行的函数
      //interval为等待的时间
      //immediate判断是否立即执行
      var timeout;  //定时器
      return function() { //返回一个闭包
        var context = this, args = arguments; //先把变量缓存
        var later = function() {  //把稍后要执行的代码封装起来
          timeout = null; //成功调用后清除定时器
          if(!immediate) fn.apply(context, args); //不立即执行时才可以调用
        };
        var callNow = immediate && !timeout;  //判断是否立即调用,并且如果定时器存在,则不立即调用
        clearTimeout(timeout);  //不管什么情况,先清除定时器,这是最稳妥的
        timeout = setTimeout(later, interval);  //延迟执行
        if(callNow) fn.apply(context, args);  //如果是第一次触发,并且immediate为true,则立即执行
      };
    };
    //使用
    var myEfficientFn = debounce(function() {
      //你要做的事
    }, 250);
    window.addEventListener('resize', myEfficientFn);

3. 防抖和节流的区别

4.得到变量的准确类型

    一般使用typeOf来获取值的类型,但是array,null用typeOf的得到的值都是object,有时候需要得到他真正的类型就用到了toString()这个方法,由于每种类型都有自己的toString()方法,所以不能直接调用,必须使用prototype链上的toString();

({}).toString.call(data);  // 得到结果为 [object object]

console.log(Object.prototype.toString.call("jerry"));//[object String] console.log(Object.prototype.toString.call(12));//[object Number] console.log(Object.prototype.toString.call(true));//[object Boolean] console.log(Object.prototype.toString.call(undefined));//[object Undefined] console.log(Object.prototype.toString.call(null));//[object Null] console.log(Object.prototype.toString.call({name: "jerry"}));//[object Object] console.log(Object.prototype.toString.call(function(){}));//[object Function] console.log(Object.prototype.toString.call([]));//[object Array] console.log(Object.prototype.toString.call(new Date));//[object Date] console.log(Object.prototype.toString.call(/\d/));//[object RegExp] function Person(){}; console.log(Object.prototype.toString.call(new Person));//[object Object]

5. 在if判断条件中使用赋值语句 if(var a = b),这样使用可以将赋值和判断同时进行  

转载于:https://my.oschina.net/u/3586418/blog/2993263

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值