• 前端基本知识 防抖、节流,compose 函数,apply,bind,call


    1.防抖

        什么是防抖:多次触发事件后,事件处理函数只执行一次,并且是在触发操作结束时执行

        原理:将若干个函数调用合成为一次,并在给定时间过去之后仅被调用一次

        代码实现:

         ① 创建滚动条

    <p>请试着滚动 DIV 中的文本:</p>
    <div style="200px;height:100px;overflow:scroll;">text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text.
    <br /><br /> text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text. text.</div>
    <p>滚动了 <span>0</span> 次。</p>

          ② 创建js

    x = 0;
    $(document).ready(function() {
    $("div").scroll(function() {
    $("span").text(x += 1);
    debounce(foo, 2000)
    });
    });

    let flag = 0; // 记录当前函数调用次数
    // 当用户滚动时被调用的函数
    function foo() {
    flag++;
    console.log('Number of calls: %d', flag);
    }

    function debounce(fn, delay) {
    // 维护一个 timer,用来记录当前执行函数状态
    let timer = null;
    return function() {
    // 通过 ‘this’ 和 ‘arguments’ 获取函数的作用域和变量
    let context = this;
    let args = arguments;
    // 清理掉正在执行的函数,并重新执行
    clearTimeout(timer);
    timer = setTimeout(function() {
    fn.apply(context, args);
    }, delay);
    }
    }

    2.节流

        什么是节流:触发函数事件后,短时间间隔内无法连续调用,只有上一次函数执行后,过了规定的时间间隔,才能进行下一次的函数调用

         原理:对处理函数进行延时操作,若设定的延时到来之前,再次触发事件,则清除上一次的延时操作定时器,重新定时。

    3.compose 函数

         compose:就是执行一系列的任务(函数)

    4.apply

       调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。

        apply最多只能有两个参数——新this对象和一个数组argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里。如果argArray不是一个有效的数组或arguments对象,那么将导致一个TypeError。如果没有提供argArray和thisObj任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数。

    5.bind

      方法为被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。

    6.call

      调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。

      call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。 

  • 相关阅读:
    50.EasyGank妹纸App
    项目开发规范,数据库设计规范
    用外部物理路由器时与外部dhcp服务时怎样使用metadata服务(by quqi99)
    [报错处理]Python Requests
    [译]为什么在__new __()后总是调用__init __()?
    '>/dev/null 2>&1' 是什么意思?
    “努力就会成功”
    [译]如何在红帽系统(RHEL)上源码安装python3?
    [译]在你的GitHub主页固定仓库
    [译]拉取仓库远程分支
  • 原文地址:https://www.cnblogs.com/yangjinbo/p/10243744.html
Copyright © 2020-2023  润新知