zoukankan      html  css  js  c++  java
  • 同步 异步和事件

    同步和异步 事件

    浏览器提供了同步和异步机制 JS是单线程的,提供了两个队列,一个是主队列(放同步代码),一个是异步队列队列池

    同步

    所有的代码按顺序执行,每一部分执行完后才能执行下面的代码。

    异步

    这块代码执行后,可以去做其他事情,等这块代码执行完后,再回来处理这里的事项。

    • 异步性能会比较高 
      • 回调函数 ajax 定时器 时间

    区别

    • 先执行同步的代码,再执行异步的代码。
    • 同步代码执行结束后才会去执行异步代码

    默认定时器间隔时间 5~10ms

    问题

    异步回调地狱 
    全部写成同步又会造成代码阻塞

    • 解决:promise处理 异步代码当成同步来写(可以用async + await解决)
    function Promise(callback){
    this.x = 1;
    callback();
    }

    Promise

    Promise是JS内置的构造函数

    • 参数是一个回调函数 
      • 回调函数有两个参数: 
        • resolve(表示执行成功的回调)
        • reject(表示执行失败的回调) 
          then方法 Promise类原型上的方法
    • then有两个参数 
      • 第一个是成功回调
      • 第二个参数表示失败的回调
    • then方法的返回值 
      • Promise类的实例,所以可以继续调用then方法
      • //除过报错全成功 只有手动抛出异常状态才会变成失败的状态(前提是没有再返回Promise对象) 
        Promise有三种状态
    • 第一种是pending(等待状态)
    • 第二种是fulfilled(成功的状态)
    • 第三种是rejected(失败的状态)

    事件

    事件绑定:事件(行为)发生时做些具体的事情(给事件绑定行为) 
    绑定事件分为DOM0级事件绑定 和 DOM2级事件绑定

    DOM0级事件绑定问题:对同一元素,同一事件绑定多个行为时,后面的行为会覆盖前面的行为,最后只会执行最后一次绑定的行为

    • DOM0级事件绑定 
      oDiv.onclick = function(){alert(1)} 
      • 事件行为移除 
        oDiv.onclick = null
    • DOM2级事件绑定 
      oDiv.addEventListener('click',function(){alert(1)},false); 
      • 参数1:事件类型
      • 参数2:事件绑定的行为
      • 参数3:事件传播的方式 
        oDiv.removeEventListener('click',fn,false);
    • IE低版本浏览器6~8:oDiv.attachEvent('onclick',fn);,没有做重复绑定的处理
    • oDiv.detachEvent('onclick',fn);

    DOM2级绑定 addEventListenerattachEvent 
    IE没有做重复绑定处理。DOM2级事件会对同一个元素绑定同一个事件绑定多次时只绑定一次。 
    标准浏览器下事件绑定行为中的this是绑定的元素 IE事件绑定行为中是window 
    IE下事件绑定行为执行的顺序是乱的,而标准浏览器是按照先后绑定的顺序执行

    事件对象

    浏览器记录了事件相关的信息

    • //本身存在,用来存储事件相关的信息 也可以用arguments[0]接收
    • 标准浏览器放在参数里接收
    • ie6~8:通过window.event接收
    • e = e || window.event
    let oDiv = document.getElementsByClassName('box')[0];
    oDiv.onclick = function (e) {//本身存在,用来存储事件相关的信息 也可以用arguments[0]接收
    console.log(e.clientX);//到可视窗口左边的距离
    }
    • e.clientX:到可视窗口左边的距离
    • e.clientY:到可视窗口上边的距离
    • e.pageY :到文档左边的距离(包含滚动条卷出去的高度) e.clientY + document.documentElement,scrollTop||docment.body.scrollTop
    • e.target: 事件源 事件绑定的元素
    • e.preventDefault 阻止默认行为 
      • ie低版本浏览器:e.returnValue = false
    • e.stopPropagation 阻止冒泡 
      • ie低版本浏览器:e.cancleBubble = true

    事件传播

    • 冒泡和捕获 不能同时看到
    • DOM0级事件只能看到事件冒泡
    • DOM2级事件可以自己设置冒泡(false)或捕获(true)
    事件冒泡

    当前元素事件被触发后,其祖先元素的相同事件也会被触发 由内往外(先自己后祖先)

    事件捕获

    当前元素事件被触发后,其祖先元素的相同事件也会被触发 由外往内(先自己后祖先)

    事件委托

    oUl.get(0)

    订阅发布模式

    • 让写出的代码具有可维护性,可复用性,可移植性。不再专注于代码本身,而是站在宏观的角度思考代码,想如何规划和管理代码
    • 代码至少满足”低耦合 高内聚”
    • 低耦合:每个模块之间的代码没有关联性
    • 高内聚:每个模块代码都是由关联性很强的代码组成,都是用来实现单一的功能,得遵守单一职责的原理
    • 如何将单独的功能在需要执行的地方执行 ->订阅发布模式 
      订阅和发布

    订阅

    做计划

    发布

    执行计划

    取订阅

    取消计划

  • 相关阅读:
    网页挂马实验
    基于内核网络过滤实验
    基与内核的键盘记录实验
    网络蠕虫病毒代码分析
    脚本病毒编写实验
    病毒查找与清除实验
    木马分析(植入分析)实验
    木马分析(控制分析)实验
    木马分析(隐藏分析)实验
    移动存储型病毒分析实验
  • 原文地址:https://www.cnblogs.com/Lia-633/p/9939625.html
Copyright © 2011-2022 走看看