前端基礎

 <!--dom事件級別-->
    // dmo0
    element.onclick=function () {};
    //dom 2
    element.addEventListener('click',function () {},false)

    //dom3
    element.addEventListener('keyup',function () { },false)

    // 事件模型
    /*   捕獲 --> 自上而下
    *    冒泡--> 自下而上
    * */

    // 事件流
/* 三個階段
*   捕獲--->目標元素 ---> 冒泡
*
* */

// 描述dom 事件捕獲的具體流程
    /*
    *       window -----> document ----->html ----> body -----> 普通元素的層級獲取
    *       冒泡: ---->反向上面部分
    * 如何獲取HTML這個節點 ---->document.getelement
    *
    * */
    // Event 對象常見應用
    /*
    *       event.preventDefault() // 阻止默認事件
    *       event.stopProgation()   // 阻止冒泡
    *       event.stopImmediatePropagation() // 事件響應優先級
    *       event.currentTarget()  // 處理事件委託  多個子級元素,判斷被點擊的是誰
    *       event.target() // 當前被綁點的元素
    * */
    // 自定義事件   || 模擬事件

    var eve = new Event('sugar');
    ev.addEventListener('sugar',function () { //sugar 事件名稱
        console.log(eve)
    })
    ev.dispatchEvent(eve)
/*  捕獲階段
*  var sugar = document.getElementById('sugar')
        window.addEventListener('click',function () {
                console.log('winodw捕獲到了事件')
        },true); // true 表示捕獲階段觸發
        document.addEventListener('click',function () {
            console.log('document捕獲到了事件')
        },true);
        document.documentElement.addEventListener('click',function () {
            console.log('HTML捕獲到了事件')
        },true)
        document.body.addEventListener('click',function () {
            console.log('body捕獲到了事件')
        },true);
        sugar.addEventListener('click',function () {
            console.log('div捕獲到了click事件')
        },true)
*
*
*
* */
<!--Http協議類型-->
    /*
    * 1.http 協議的主要特色
    * 2.http 報文的組成部分
    * 3.http方法
    * 4.post 和get 的區別
    * 5.http狀態碼
    * 6.什麼是持久鏈接
    * 7.什麼是管線化
    *
    * */
// 1.http 協議的主要特色
    /*
    * 1.簡單快速 // 直接輸入url訪問文件
    * 2.靈活     // 經過一個http協議完成不一樣數據類型傳輸
    * 3.無鏈接   // 鏈接一次就會斷開  不會保持鏈接
    * 4.無狀態   // 第一次和第二次鏈接 http協議是沒法判斷身份
    *            // 服務端能夠經過session來判斷
    *
    * */
    // 2.http 報文的組成部分
    /*包含兩個部分——請求報文    響應報文
    Request   Response
    *       請求報文{
    *           1.請求行  --> http方法 頁面地址 http協議以及版本
    *           2.請求頭 -->  key value 等  告訴服務端須要請求哪些數據
    *           3.空行   --> 告訴服務端該用請求體來解析
    *           4.請求體
    *       }
    *       響應報文{
    *           1.狀態行
    *           2.響應頭
    *           3.空行
    *           4.響應體
    *       }
    * */
    // 3.http方法
    /*
    * pst ---> 傳輸資源
    * get ---> 獲取資源
    * put ----> 更新資源
    * delete ---> 刪除資源
    * head ---> 獲取報文首部
    *
    * */
    // 4.post 和get 的區別
    /*
    * 1.get在瀏覽器回退時是無害的,而post則會再次請求
    * 2.get 產生的url地址是能夠唄收藏的,post則不能夠
    * 3.get請求會被瀏覽器主動緩存,post不會主動緩存
    * 4.get請求只能進行url編碼,post支持多種編碼格式
    * 5.get請求參數會被完整保存在瀏覽器歷史記錄中,post的參數不會被保存
    * 6.get請求在url中傳輸的參數有長度限制,post沒有
    * 7.對參數類型的限制:get只接受ascll字符,post沒有限制
    * 8.post比get更安全,get參數直接暴露在url上面
    * 9.get參數經過url,post則是在Request body中
    *
     *  */
    // 5.http狀態碼
    /*
    * 1xx : 指示信息  表示請求已經接收,繼續處理
    * 2xx :成功   表示請求已經被成功接收
    * 200 請求成功  206 客戶發送了一個帶有Range頭的get請求  服務器完成了
    *
    * 3xx :重定向  完成請求必須進行更進一步的操做
    * 304 :讀取緩存  也算成功  301(永久) 302(臨時) 所請求的頁面轉移到了新的url
    * 4xx : 客戶端錯誤   請求因爲發錯誤或者沒法實現請求
    * 5xx : 服務器錯誤   服務器不能實現合法的請求
    * */
    // 6.什麼是持久鏈接
    /*  http1.1後版本可使用
    * http協議採用‘請求-應答’模式,當使用普通模式,每一個請求/應答 客戶和服務器都要
    * 從新簡歷一個鏈接,完成後當即斷開 (http協議爲無鏈接的協議)
    *
    * 當使用Keep-Alive模式時(持久鏈接或者鏈接重用),Keep-Alive功能使客戶端到服務器端的鏈接
    * 持續有效,比秒了從新鏈接或者創建
    * */
    // 7.什麼是管線化
    /* http1.1後支持


    * 在使用持久鏈接的狀況下
    * 請求-響應 請求- 響應 請求- 響應   是沒有中斷的
    *
    * 管線化請求下: 直接打包集體傳輸和返回
    * 請求1 請求2 請求3   響應1 響應2 響應3
    *
    *   服務端得支持管線化
    *
    * */
/*



    * 1.建立對象有幾種方法
    * --> 原型
    * --> 構造函數 任何一個函數被new使用 均可以叫構造函數
    * --> 實例
    * --> 原型鏈
    *
    * instanceof 的原理
    *
    *  new 運算符
    * */
// 建立對象有幾種方法
/*    //1
    var sugar = { name:'sugar' }
    var sugar1 = new Object({ name:'sugar1'});
    //2
    var Su = function () {
        this.name = 'Suo'
    };
    var Suo = new Su();
    //3
    var huahsneg = { name:"sugar" };
    var sugar=Object.create(huahsneg)*/
// 原型對象
/*
*          構造函數  constructor<----->prototype   原型對象 ---->_proto_  原型對象
*                       new  \     /   _proto_
*                                實例
*

*
* */

    /*
    * 1.渲染機制
    * 2.js運行機制{
    *   隊列任務和Event Loop
    * }
    * 3.頁面性能
    * 4.錯誤監控
    *
    * */
// 1.渲染機制
    /*
    * --> 什麼是DOCTYPE以及做用
    * ---> 瀏覽器渲染過程
    * ---> 重排Reflow
    * ---> 重繪 Repaint
    * ---> 佈局Layout
    *
    * */
// --> 什麼是DOCTYPE以及做用
/*
*   網頁採用html5,<!DOCTYPE> 聲明位於文檔中的最前面的位置,
*   處於 <html> 標籤以前。此標籤可告知瀏覽器文檔使用哪一種 HTML 或 XHTML 規範。
    這個標籤可聲明三種 DTD 類型,分別表示嚴格版本、過渡版本以及基於框架的
    HTML 文檔。
* */
// ---> 瀏覽器渲染過程
/* 參考  https://www.cnblogs.com/slly/p/6640761.html
*
*   解析渲染DOM 自上而下
*
* */
// ---> 重排Reflow
/*
*   一個頁面由兩部分組成:
    DOM:描述該頁面的結構
    render:描述 DOM 節點 (nodes) 在頁面上如何呈現
*
*
*   1.解析HTML代碼並生成一個 DOM 樹。
    2.解析CSS文件,順序爲:瀏覽器默認樣式->自定義樣式->頁面內的樣式。
    3.生成一個渲染樹(render tree)。這個渲染樹和DOM樹的不一樣之處在於,它是受樣式影響的。它不包括那些不可見的節點。
    4.當渲染樹生成以後,瀏覽器就會在屏幕上「畫」出全部渲染樹中的節點。
*
* 下列狀況會發生重排 重繪{
*       頁面初始渲染
        添加/刪除可見DOM元素
        改變元素位置
        改變元素尺寸(寬、高、內外邊距、邊框等)
        改變元素內容(文本或圖片等)
        改變窗口尺寸
*   }
*
*   如何減小重排
*   1.分離讀寫操做
*   2.樣式集中改變
*   3.可使用absolute脫離文檔流
*   4.使用 display:none ,不使用 visibility,也不要改變 它的 z-index
*   5.能用css3實現的就用css3實現
* */
// ---> 重繪 Repaint


    // 2.js運行機制
    /*  1. js屬於單線程 {
            一個時間只能作一個事情
            自上而下執行,
            優先順序: 同步任務處理完成後 ---> 異步任務
    }
        2. 任務隊列 {
            同步任務    console  -->  同步任務
            異步任務    setTimeout  --> 屬於異步任務
        }
    *   console.log(1);
        setTimeout(function () {
                console.log(2)
            },0);
         console.log(3)
    *   ///  1  3   2
    *
    *       console.log('A');
             setTimeout(function () {
                  console.log('B')
             },0);
             while(true){
            }
    *   // 輸出 A   任何異步操做都在同步執行完畢之後再執行
    *
    *
    *    for(var i=0;i<4;i++){
    *    // for循環 遇到setTimeout,沒有直接進入異步隊列中就+1  等到1秒後再把語句放入異步隊列中
            setTimeout(function () {
                console.log(i);
             },1000)
         }
    *
     * */
// 異步任務
    /*
    * 1.setTimeout  setInterval
    * 2.dom 事件
    * 3.Promise
    * */
相關文章
相關標籤/搜索