# html样例代码
   https://gitee.com/ext-opensource/html-example

##### html页面加载以及加载事件
    1. dom渲染:
        页面dom解析完形成dom树,css解析完形成cssom树,然后dom、cssom合成render树,dom解析跟css解析互不影响.
    2. js会操作dom跟css,故js会影响解析和渲染过程,有如下三种情况:
        1、<script>,dom树解析遇到script标签,立即停止解析,下载并运行js脚本,待js执行完毕,继续dom解析.
        2、<script defer>,这种是延迟执行脚本,dom树解析时遇到此标签,立即下载该js脚本,并保持dom解析同步进行.dom解析完毕后,按照js脚本顺序,依次执行js脚本.然后触发DOMContentLoaded事件.
        3、<script async>,异步执行脚本,dom渲染跟js互不干扰,DOMContentLoaded事件跟js脚本无关.多个js脚本执行顺序不定.
    3. 页面事件的生命周期:
        ### window.DOMContentLoaded事件:
            在DOM树构建完毕后被触发,页面已经完全加载HTML,js可以访问所有DOM节点,初始化界面.
            图片及其他资源文件可能还在下载中.

        ### window.load事件:
            在页面所有资源被加载完毕后触发,通常我们不会用到这个事件,因为我们不需要等那么久.

        ### window.beforeunload事件:
            在用户即将离开页面时触发,它返回一个字符串,浏览器会向用户展示并询问这个字符串以确定是否离开.

        ### window.unload事件:
            在用户已经离开时触发,在这个阶段仅可以做一些没有延迟的操作,由于种种限制,很少被使用.

        ### document.readyState事件:
            表征页面的加载状态,可以在readystatechange中追踪页面的变化状态:
            loading -- 页面正在加载中.
            interactive -- 页面解析完毕,时间上和 DOMContentLoaded同时发生,不过顺序在它之前.
            complete -- 页面上的资源都已加载完毕,时间上和window.onload同时发生,不过顺序在他之前.

##### js解析器的执行原理
    执行js代码一般分两步:1.预解析代码。   2.逐行执行代码。

    第一步:预解析代码
        预解析代码呢,主要会把var , function , 参数等一些东西 存储进仓库里面(内存)。
        1.var 一般用于声明变量,预解析代码的时候,等号后面的赋值过程不会执行,所以预解析时的var 变量 都是未定义的。
        2,.function 函数呢,预解析的时候,值就是函数里面的内容。
        当变量和函数重名时:就只留下函数的值,不管顺序谁前谁后。所以函数的优先级比变量高。注意:这只是预解析。
        当函数和函数重名时:会留下后面那个,会遵循上下文机制。

    第二步:逐行执行代码
        当预解析完成之后,就开始逐行执行代码了,全部代码都会完整的执行。

##### js加载模式
    amd、cmd、common、umd、esm


###### 其它
    createDocumentFragment