3atv精品不卡视频,97人人超碰国产精品最新,中文字幕av一区二区三区人妻少妇,久久久精品波多野结衣,日韩一区二区三区精品

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

webform 控件上面能写 前端事件吗_详细的网易前端秘籍—如何准备面试

發布時間:2025/3/20 HTML 9 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webform 控件上面能写 前端事件吗_详细的网易前端秘籍—如何准备面试 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
點擊上方“前端印象”,選擇“設為星標”第一時間關注技術干貨!

前言

開門見山,這篇文章,適合「初級前端」,如果你還在校招的話,或者還在求職的話,可以看看本文,找一找靈感,希望對你們有幫助呀。

先說一下最近個人情況:2020年8月底已經拿到網易有道offer, 這算是我的第一份web前端工作吧,一直以來都是自學前端的,走過很多的彎路,之前的技術棧是Vue.js,目前往react方向走。

這是一次萬恒的三輪網易面經

我的感受就是,自己一邊梳理知識點,一邊總結歸納,收獲可能更大,所以打算把我梳理的部分分享出來,篇幅有點長,大家見諒呀。

覆蓋的點不是很全,分享給你們,希望你們秋招一切順利,offer收割機??????

HTML系列

你是如何理解 HTML 語義化的?

讓頁面內容結構化,它有如下優點

1、易于用戶閱讀,樣式丟失的時候能讓頁面呈現清晰的結構。
2、有利于SEO,搜索引擎根據標簽來確定上下文和各個關鍵字的權重。
3、方便其他設備解析,如盲人閱讀器根據語義渲染網頁
4、有利于開發和維護,語義化更具可讀性,代碼更好維護,與CSS3關系更和諧

如:

代表頭部代表超鏈接區域定義文檔主要內容可以表示文章、博客等內容通常表示側邊欄或嵌入內容代表尾部

可以跟面試官講的更具體一點?

  • 第一個是荒野階段,那時候前端的代碼主要是后臺來寫的,所以那個時候寫的代碼主要是用table來布局的。

  • 第二階段---美工階段,這個時候就有專門的人來前端代碼了,這個階段的布局主要是DIV+CSS布局,但是呢有一個問題,就是不夠語義化。

  • 第三個階段-->> 前端階段,也就是利用具有語義的標簽,比如p,h1,h2,article,header,nav,main,aside,footer這些標簽,使用這些正確的標簽,可以表達正確的內容,也利于開發和維護。

meta viewport 是做什么用的,怎么寫?

通常viewport是指視窗、視口。瀏覽器上(也可能是一個app中的webview)用來顯示網頁的那部分區域。在移動端和pc端視口是不同的,pc端的視口是瀏覽器窗口區域,而在移動端有三個不同的視口概念:布局視口、視覺視口、理想視口

meta有兩個屬性name 和 http-equiv

name

  • keywords(關鍵字) ? 告訴搜索引擎,你網頁的關鍵字

  • description(網站內容描述) ? 用于告訴搜索引擎,你網站的主要內容。

  • viewport(移動端的窗口) ?后面介紹

  • robots(定義搜索引擎爬蟲的索引方式) robots用來告訴爬蟲哪些頁面需要索引,哪些頁面不需要索引

  • author(作者)

  • generator(網頁制作軟件)

  • copyright(版權)

http-equiv

?

http-equiv顧名思義,相當于http的文件頭作用。

?

有以下參數:

  • content-Type 設定網頁字符集

    //舊的HTML,不推薦 //HTML5設定網頁字符集的方式,推薦使用UTF-8
  • X-UA-Compatible(瀏覽器采用哪種版本來渲染頁面)

    //指定IE和Chrome使用最新版本渲染當前頁面
  • cache-control(請求和響應遵循的緩存機制)

  • expires(網頁到期時間)

你用過哪些 HTML 5 標簽?

有、、、、

「canvas畫布」

const?ctx?=?canvas.getContext('2d');??//?獲取它的2d上下文
ctx.fillStyle?=?'green';????//?設置筆刷的填充色
ctx.fillRect(10,?10,?100,?100);??//??利用畫筆范圍,矩形,比如圓

video

autoplay 布爾屬性;視頻馬上自動開始播放,不會停下來等著數據載入結束。

「controls」 ? 提供用戶控制,允許用戶控制視頻的播放,包括音量,跨幀,暫停/恢復播放。

「loop」 布爾屬性;指定后,會在視頻結尾的地方,自動返回視頻開始的地方。

「track」標簽表示的是字幕

「poster」 表示的是封面

"subtitles"?src="foo.en.vtt"?srclang="en"?label="English">

H5 是什么?-->>移動端頁面

h5一般指的是開一個WebView來加載頁面吧,

「WebView是一種控件,它基于webkit引擎,因此具備渲染Web頁面的功能。」

基于Webview的混合開發,就是在 Anddroid (安卓)/(蘋果)原生APP里,通過WebView控件嵌入Web頁面。

很多APP都是外邊套原生APP的殼,內容是H5頁面(基于html+css+js的Web頁面)?,F在的移動端混合開發軟件,如果對于交互渲染要求不是特別高的項目,基本都是這么玩的。

「WebView作用」

  • 顯示和渲染Web頁面
  • 直接使用html文件(網絡上或本地assets中)作布局
  • 可和JavaScript交互調用

HTML5新特性:

  • 本地存儲特性
  • 設備兼容特性 HTML5提供了前所未有的數據與應用接入開放接口
  • 連接特性 WebSockets
  • 網頁多媒體特性 支持Audio Video SVG Canvas WebGL CSS3
  • CSS3特性
  • 增加拖放API、地理定位、SVG繪圖、canvas繪圖、Web Worker、WebSocket

    區分普通顯示屏和高清屏

    • 當devicePixelRatio值等于1時(也就是最小值),那么它普通顯示屏。

    • 當devicePixelRatio值大于1(通常是1.5、2.0),那么它就是高清顯示屏。

    • 不同像素的圖利用媒體查詢結合 devicePixelRatio 可以區分普通顯示屏和高清顯示屏

    并給出了如下CSS設計方案:

    .css{/*?普通顯示屏(設備像素比例小于等于1.3)使用1倍的圖?*/?
    ????background-image:?url(img_1x.png);
    }
    @media?only?screen?and?(-webkit-min-device-pixel-ratio:1.5){
    .css{/*?高清顯示屏(設備像素比例大于等于1.5)使用2倍圖??*/
    ????background-image:?url(img_2x.png);
    ??}
    }

    「服務端用nginx對圖片進行處理」

    想要什么樣尺寸的圖片自己裁切,我們提供了按比例縮放和自定尺寸的裁切方法,地址后拼接字符串就行。

    「使用更小更快更強,新一代圖片格式 WebP」

    在實測中,webp 格式比 jpg 格式減小約 20%。這對優化用戶體驗,減少CDN帶寬消耗有很好的效果。

    「如何判斷呢」

    我想到一個解決的方案,就是通過User-Agent信息,可以拿到你的瀏覽器信息,通過對你的瀏覽器分類,支持webp放在白名單里,不支持的則為黑名單。判斷為白名單,則直接調用,返回webp格式圖片;反之,則顯示原圖。


    DOM

    事件冒泡

    事件會從最內層的元素開始發生,一直向上傳播,直到document對象。

    "outer">

    "inner">Click?me!


    因此上面的例子在事件冒泡的概念下發生click事件的順序應該是

    「p -> div -> body -> html -> document」

    「事件捕獲」

    與事件冒泡相反,事件會從最外層開始發生,直到最具體的元素。

    上面的例子在事件捕獲的概念下發生click事件的順序應該是

    「document -> html -> body -> div -> p」

    所以從上面的圖片來看?1-5是捕獲過程,5-6是目標階段,6-10是冒泡階段

    addEventListener

    addEventListener方法用來為一個特定的元素綁定一個事件處理函數,是JavaScript中的常用方法。

    ?element.addEventListener(event,?function,?useCapture)

    重點來看看第三個參數useCapture

    • true - 事件句柄在捕獲階段執行(即在事件捕獲階段調用處理函數)
    • false- false- 默認。事件句柄在冒泡階段執行(即表示在事件冒泡的階段調用事件處理函數)

    所以我們通常來說,默認第三個參數不寫的話,是按照事件句柄在冒泡執行的。

    attachEvent

    兼容IE的寫法,默認是事件冒泡階段調用處理函數,寫事件名時候要加上"on"前綴("onload"、"onclick"等)。

    object.attachEvent(event,?function)

    事件代理

    利用事件流的特性,我們可以使用一種叫做事件代理的方法,其實利用的就是事件冒泡的機制。

    "xxx">下面的內容是子元素1li內容>>>??這是span內容123
    ????????下面的內容是子元素2li內容>>>??這是span內容123
    ????????下面的內容是子元素3li內容>>>??這是span內容123

    js代碼

    xxx.addEventListener('click',?function?(e)?{
    ????????????console.log(e,e.target)
    ????????????if?(e.target.tagName.toLowerCase()?===?'li')?{
    ????????????????console.log('打印')
    ????????????}
    })

    更加規范的寫法?

    ??function?delegate(element,?eventType,?selector,?fn)?{
    ????????????element.addEventListener(eventType,?e?=>?{
    ????????????????let?el?=?e.target
    ????????????????while?(!el.matches(selector))?{
    ????????????????????if?(element?===?el)?{
    ????????????????????????el?=?null
    ????????????????????????break
    ????????????????????}
    ????????????????????el?=?el.parentNode
    ????????????????}
    ????????????????el?&&?fn.call(el,?e,?el)
    ????????????},true)
    ????????????return?element
    ????????}

    阻止事件冒泡和默認事件

    event.preventDefault()???//?阻止默認事件
    event.stopPropagation()?//阻止冒泡

    實現一個可以拖拽的DIV

    "xxx">

    分割線-—---

    var?dragging?=?false
    var?position?=?null

    xxx.addEventListener('mousedown',function(e){
    ??dragging?=?true
    ??position?=?[e.clientX,?e.clientY]
    })


    document.addEventListener('mousemove',?function(e){
    ??if(dragging?===?false)?return?null
    ??console.log('hi')
    ??const?x?=?e.clientX
    ??const?y?=?e.clientY
    ??const?deltaX?=?x?-?position[0]
    ??const?deltaY?=?y?-?position[1]
    ??const?left?=?parseInt(xxx.style.left?||?0)
    ??const?top?=?parseInt(xxx.style.top?||?0)
    ??xxx.style.left?=?left?+?deltaX?+?'px'
    ??xxx.style.top?=?top?+?deltaY?+?'px'
    ??position?=?[x,?y]
    })
    document.addEventListener('mouseup',?function(e){
    ??dragging?=?false
    })

    CSS系列

    兩種盒模型分別說一下

    也就是標準盒模型寫起來更方便,也更規范吧。

    盒模型分為標準盒模型和怪異盒模型(IE模型)

    box-sizing:content-box ??//標準盒模型
    box-sizing:border-box ???//怪異盒模型

    「content-box」

    ?

    默認值,標準盒子模型。width 與 height 只包括內容的寬和高, 不包括邊框(border),內邊距(padding),外邊距(margin)。注意: 內邊距、邊框和外邊距都在這個盒子的外部。比如說,.box {width: 350px; border: 10px solid black;} 在瀏覽器中的渲染的實際寬度將是 370px。

    ?

    尺寸計算公式:

    width = 內容的寬度

    height = 內容的高度

    寬度和高度的計算值都不包含內容的邊框(border)和內邊距(padding)。

    「border-box」

    ?

    width 和 height 屬性包括內容,內邊距和邊框,但不包括外邊距。這是當文檔處于 Quirks模式 時Internet Explorer使用的盒模型。注意,填充和邊框將在盒子內 , 例如, .box {width: 350px; border: 10px solid black;} 導致在瀏覽器中呈現的寬度為350px的盒子。內容框不能為負,并且被分配到0,使得不可能使用border-box使元素消失。

    ?

    尺寸計算公式:

    width = border + padding + 內容的寬度

    height = border + padding + 內容的高度

    注意:如果你在設計頁面中,發現內容區被撐爆了,那么就先檢查一下border-sizing是什么,最好在引用reset.css的時候,就對border-sizing進行統一設置,方便管理

    如何垂直居中?

    16種方法實現水平居中垂直居中

    水平局中

    「內聯元素」「寬度默認就是內容的寬度」,只需要給父級添加text-align

    .wrapper{text-align:?center;}

    「塊級元素」,將它的margin-left和margin-right設置為auto,并且塊級元素一定要設置寬度,否則元素默認為100%寬度,不需要居中。

    .inner{
    ????????????display:?block;
    ????????????width:?150px;
    ????????????margin:?0?auto;
    ????????}
    //?一定要設置寬度,不然就不需要局中了

    兩個以上的水平局中,可以將其設置為display:inline-block,在設置父級text-align

    垂直局中

    「內聯元素」,第一種實用的是flex布局,這里局中的值得是相對于父盒子

    .wrapper{
    ????????????display:?flex;
    ????????????align-items:?center;
    ????????}

    第二種,這里面指的局中是相對于自身而言的

    .inner{
    ????????????height:100px;
    ????????????line-height:100px;
    }

    「塊級元素」

    寬高確定情況下,實用 「position absolute + 負margin」

    寬高不確定的情況下,實用「position absolute + transform」

    垂直水平局中

    子元素寬高確定的情況下,使用「position absolute + 負margin」

    子元素寬高不確定的,使用「position absolute + transform」

    .inner{
    ????????????position:?absolute;
    ????????????top:?50%;
    ????????????left:?50%;
    ????????????transform:?translate(-50%,-50%);
    ????????????background:?blue;
    ????????}

    當然了flex布局也是可以解決問題的,下面就介紹?


    兩列布局

    左列定寬,右列自適應

    「float+margin」

    .left{
    ????????????float:?left;
    ????????????width:?100px;
    ????????????height:?100%;
    ????????????background:?rebeccapurple;
    ????????}
    ????????.rigth{
    ????????????height:?100%;
    ????????????margin-left:?100px;?/*大于等于#left的寬度*/
    ????????????background:?blue;
    ????????}

    左列自適應,右列定寬

    「float+overflow」

    "wrapper">"rigth">"left">

    css代碼?

    .rigth?{
    ????????????margin-left:?10px;
    ????????????/*margin需要定義在#right中*/
    ????????????float:?right;
    ????????????width:?100px;
    ????????????height:?100%;
    ????????????background-color:?#0f0;
    ????????}

    ????????.left?{
    ????????????overflow:?hidden;
    ????????????/*觸發bfc*/
    ????????????height:?100%;
    ????????????background-color:?blue;
    ????????}

    三列布局

    兩列定寬,一列自適應

    使用float+margin實現
    "wrapper">"left">"main">"rigth">

    css代碼

    .wrapper?{
    ????????????height:?400px;
    ????????????background:?red;
    ????????????min-width:?500px;
    ????????}

    ????????.left?{
    ????????????margin-left:?10px;
    ????????????float:?left;
    ????????????width:?100px;
    ????????????height:?100%;
    ????????????background-color:?#0f0;
    ????????}
    ????????.main{
    ????????????float:?left;
    ????????????width:?100px;
    ????????????height:?100%;
    ????????????margin-left:?20px;
    ????????????background:?brown;
    ????????}
    ????????.rigth?{

    ????????????margin-left:?230px;??/*等于#left和#center的寬度之和加上間隔,多出來的就是#right和#center的間隔*/
    ????????????height:?100%;
    ????????????background-color:?blue;
    ????????}

    「間列自適應寬度,旁邊兩側固定寬度」

    「雙飛翼布局」

    實現步驟

    • 三個部分都設定為左浮動,然后設置center的寬度為100%,此時,left和right部分會跳到下一行;
    • 通過設置margin-left為負值讓left和right部分回到與center部分同一行;
    • center部分增加一個內層div,并設margin: 0 200px;

    「html部分」

    "wrapper">"main">"inner">"left">"right">

    「css部分」

    .wrapper?{
    ????????????/*?//確保中間內容可以顯示出來,兩倍left寬+right寬?*/
    ????????????min-width:?600px;?
    ????????}

    ????????.left?{
    ????????????float:?left;
    ????????????width:?200px;
    ????????????height:?400px;
    ????????????background:?red;
    ????????????margin-left:?-100%;
    ????????}

    ????????.main?{
    ????????????float:?left;
    ????????????width:?100%;
    ????????????height:?500px;
    ????????????background:?yellow;
    ????????}

    ????????.main?.inner?{
    ????????????/*?margin水平方向要是左右兩者的寬度?*/
    ????????????margin:?0?200px;????
    ????????????height:?100%;
    ????????????border:?2px?solid?brown;
    ????????}
    ????????.right?{
    ????????????float:?left;
    ????????????width:?200px;
    ????????????height:?400px;
    ????????????background:?blue;
    ????????????margin-left:?-200px;
    ????????}

    flex 怎么用,常用屬性有哪些?

    flex 的核心的概念就是 「容器」「軸」。

    父容器

    「justify-content 項目在主軸上的對齊方式」

    • flex-start | flex-end | center | space-between | space-around

    • space-between 子容器沿主軸均勻分布,位于首尾兩端的子容器與父容器相切。

    • space-around ?子容器沿主軸均勻分布,位于首尾兩端的子容器到父容器的距離是子容器間距的一半。

    「align-items」 「定義項目在側軸上如何對齊」

    • flex-start | flex-end | center | baseline | stretch;
    • baseline: 項目的第一行文字的基線對齊。
    • stretch(默認值):如果項目未設置高度或設為auto,將占滿整個容器的高度。

    子容器

    「align-self ? 單個項目對齊方式」

    • align-self: ? auto | flex-start | flex-end | center | baseline | stretch;

    「flex:前面三個屬性的簡寫 是flex-grow ?flex-shrink flex-basis的簡寫」

    • flex-grow 放大比例 根據所設置的比例分配盒子所剩余的空間
    • flex-shrink 縮小比例 設置元素的收縮比例 ? 多出盒子的部分,按照比例的大小砍掉相應的大小,即比例越大,被砍的越大,默認值是1
    • flex-basis ?伸縮基準值 項目占據主軸的空間
    • flex-basis 該屬性設置元素的寬度或高度,當然width也可以用來設置元素寬度,如果元素上同時出現了width 和flex-basis那么flex-basis會覆蓋width的值

    flex: 0 1 auto;默認主軸是row,那么不會去放大比例,如果所有的子元素寬度和大于父元素寬度時,就會按照比例的大小去砍掉相應的大小。

    「flex-direction 決定主軸的方向 ?即項目的排列方向」

    row | row-reverse | column | column-reverse

    BFC 是什么?

    深入理解BFC和外邊距合并(Margin Collapse)

    BFC全稱是Block Formatting Context,即塊格式化上下文。

    BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素。反之也如此。

    下列方式會創建「塊格式化上下文」

  • 根元素
  • float屬性不為none
  • position為absolute或fixed
  • display為inline-block, table-cell, table-caption, flex, inline-flex
  • overflow不為visible
  • 需要背的條件?

  • 浮動元素(元素的 float 不是 none)
  • 絕對定位元素(元素的 position 為 absolute 或 fixed)
  • 行內塊元素
  • overflow 值不為 visible 的塊元素
  • 彈性元素(display為 flex 或 inline-flex元素的直接子元素)
  • 「BFC布局規則」

  • 內部的Box會在垂直方向,一個接一個地放置。
  • Box垂直方向的距離由margin決定。屬于同一個BFC的兩個相鄰Box的margin會發生重疊
  • 每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對于從左往右的格式化,否則相反)。即使存在浮動也是如此。
  • BFC的區域不會與float box重疊。
  • BFC就是頁面上的一個隔離的獨立容器,容器里面的子元素不會影響到外面的元素。反之也如此。
  • 計算BFC的高度時,浮動元素也參與計算
  • 選擇器優先級

    「css常用選擇器」

    通配符:*
    ID選擇器:#ID
    類選擇器:.class
    元素選擇器:p、a ???等
    后代選擇器:p span、div a ??等
    偽類選擇器:a:hover 等
    屬性選擇器:input[type="text"]??等

    「css選擇器權重」

    !important -> 行內樣式 -> #id -> .class -> 元素和偽元素 -> * -> 繼承 -> 默認

    CSS新特性

    transition:過渡
    transform:旋轉、縮放、移動或者傾斜
    animation:動畫
    gradient:漸變
    shadow:陰影
    border-radius:圓角

    「transition」

    transition:?property?duration?timing-function?delay;
    //?css屬性名稱???過渡時間??過渡時間曲線??過渡延遲時間

    「transform」

    transform:rotate(30deg)??旋轉
    transform:translate(100px,20px)??移動
    transform:scale(2,1.5);??縮放
    transform:skew(30deg,10deg);??扭曲

    「animation」

    animation:?move?1s?linear?forwards;
    //?定義動畫的時間??duration?
    //?動畫的名稱
    //?動畫的貝塞爾曲線
    // animation-fill-mode 屬性規定動畫在播放之前或之后,其動畫效果是否可見。?
    //?forwards??當動畫完成后,保持最后一個屬性值?

    清除浮動說一下

    第一種用偽元素

    .clearfix:after{
    ??content:?"";
    ??display:?block;
    ??clear:?both;?
    }

    ?.clearfix{
    ?????zoom:?1;?/*?IE?兼容*/
    ?}

    第二種給父容器添加 overflow:hidden 或者 auto 樣式

    overflow:hidden;

    三種地位方案

    在定位的時候,瀏覽器就會根據元素的盒類型和上下文對這些元素進行定位,可以說盒就是定位的基本單位。定位時,有三種定位方案,分別是常規流,浮動已經絕對定位。

    常規流(Normal flow)

    • 在常規流中,盒一個接著一個排列;
    • 「塊級格式化上下文」里面, 它們「豎著」排列;
    • 「行內格式化上下文」里面, 它們「橫著」排列;
    • 當position為static或relative,并且float為none時會觸發常規流;
    • 對于「靜態定位」(static positioning),position: static,「盒的位置是常規流布局里的位置」
    • 對于「相對定位」(relative positioning),position: relative,盒偏移位置由這些屬性定義top,bottom,leftandright。「即使有偏移,仍然保留原有的位置」,其它常規流不能占用這個位置。

    浮動(Floats)

    • 盒稱為浮動盒(floating boxes);
    • 它位于當前行的開頭或末尾;
    • 「導致常規流環繞在它的周邊」,除非設置 clear 屬性;

    絕對定位(Absolute positioning)

    • 絕對定位方案,「盒從常規流中被移除」,不影響常規流的布局;
    • 它的定位相對于它的包含塊,相關CSS屬性:top,bottom,left及right;
    • 如果元素的屬性position為absolute或fixed,它是絕對定位元素;
    • 對于position: absolute,元素定位將相對于最近的一個relative、fixed或absolute的父元素,如果沒有則相對于body;

    獲取DOM

    "css-cell">"heart">"sun">
    ????
    ???let?oDiv?=?document.getElementById('css-cell')
    ????????let?oDiv1?=?document.getElementsByTagName('div')???//集合?根據標簽
    ????????let?oDiv2?=?document.querySelectorAll('div')?????//?集合??標簽???????
    ????????let?oDiv3?=?document.getElementsByClassName('heart')?????//?className????

    Attribute與Property

    attribute:是HTML標簽上的某個屬性,如id、class、value等以及自定義屬性

    property:是js獲取的DOM對象上的屬性值,比如a,你可以將它看作為一個基本的js對象。

    let?demo11?=?oDiv.getAttribute('class');
    let?demo2?=?oDiv.setAttribute('data-name','new-value')

    路由規則

    可以在不刷新頁面的前提下動態改變瀏覽器地址欄中的URL地址,動態修改頁面上所顯示資源。

    「window.history的方法和屬性」

    back() forward() go()

    HTML5 新方法:添加和替換歷史記錄的條目

    「pushState()」

    history.pushState(state,?title,?url);?添加一條歷史記錄,不刷新頁面
    • state : 一個于指定網址相關的狀態對象,popstate事件觸發時,該對象會傳入回調函數中。如果不需要這個對象,此處可以填null。
    • title : 新頁面的標題,但是所有瀏覽器目前都忽略這個值,因此這里可以填null。
    • url : 新的網址,必須與前頁面處在同一個域。瀏覽器的地址欄將顯示這個網址。
    replaceState
    ??history.replaceState(state,?title,?url);??替換當前的歷史記錄,不刷新頁面
    • 這兩個API的相同之處是都會操作瀏覽器的歷史記錄,而不會引起頁面的刷新。

    • 不同之處在于,pushState會增加一條新的歷史記錄,replaceState則會替換當前的歷史記錄。

    • 這兩個api,加上state改變觸發的popstate事件,提供了單頁應該的另一種路由方式。

    popstate 事件:歷史記錄發生改變時觸發

    基于hash(location.hash+hashchange事件)

    我們知道location.hash的值就是url中#后面的內容,如http://www.163.com#something。

    此網址中,location.hash='#something'。

    hash滿足以下幾個特性,才使得其可以實現前端路由:

  • url中hash值的變化并不會重新加載頁面,因為hash是用來指導瀏覽器行為的,對服務端是無用的,所以不會包括在http請求中。
  • hash值的改變,都會在瀏覽器的訪問歷史中增加一個記錄,也就是能通過瀏覽器的回退、前進按鈕控制hash的切換
  • 我們可以通過hashchange事件,監聽到hash值的變化,從而響應不同路徑的邏輯處理。
  • window.addEventListener("hashchange",?funcRef,?false)

    如此一來,我們就可以在hashchange事件里,根據hash值來更新對應的視圖,但不會去重新請求頁面,同時呢,也在history里增加了一條訪問記錄,用戶也仍然可以通過前進后退鍵實現UI的切換。

    觸發hash值的變化有2種方法?

    • 一種是通過a標簽,設置href屬性,當標簽點擊之后,地址欄會改變,同時會觸發hashchange事件
    "#TianTianUp">to?somewhere
    • 另一種是通過js直接賦值給location.hash,也會改變url,觸發hashchange事件。
    location.hash="#somewhere"

    JS系列

    JS基礎是最重要的一個環節,所以這個專題,我也是梳理總結了很多,畢竟這個是靈魂嘛,那接下來我把我梳理的文章也總結一遍,然后我復習的部分內容也梳理出來了。

    往期文章總結

    • 「數組方法」從詳細操作js數組到淺析v8中array.js(230+?)
    • [查缺補漏]再來100道JS輸出題酸爽繼續(共1.8W字)(240+?)
    • 「查缺補漏」送你 54 道 JavaScript 面試題(650+?)
    • 「一勞永逸」送你21道高頻JavaScript手寫面試題(620+?)

    介紹一下js數據類型

    基本數據類型,Number、String、Boolean、Undefined、Null、Symbol ,BigInt。

    比如Symbol提出是為了解決什么問題?可以往全局變量沖突講。

    比如BigInt,解決的問題是大數問題,超過了安全數,怎么辦?

    引用數據類型,數組,對象,函數。

    可以試著往它們存儲問題上面答,基本數據類型的值直接保存在棧中,而復雜數據類型的值保存在堆中,通過使用在棧中保存對應的指針來獲取堆中的值。

    Number.isFinite & isFinite區別

    某種程度上,都是檢測「有限性」的值。兩者區別在于,isFinite函數強制將一個非數值的參數轉換成數值,如果能轉換成數值,然后再去判斷是否是「有限的」。

    Number.isFinite()檢測有窮性的值,這個方法不會強制將一個非數值的參數轉換成數值,這就意味著,只有數值類型的值,且是有窮的(finite),才返回 true。

    Number.isFinite(0)????//?true
    Number.isFinite('0')??//?false
    Number.isFinite(Infinity)?false
    isFinite('0')???//?true
    isFinite('0')??//?true
    isFinite(Infinity)??//?false

    isNaN 和 Number.isNaN 函數的區別?

    • isNaN首先會接受一個參數,參數講這個轉換成數字,任何不能被轉換成數值的都返回true,所以對于非數字的參數,也是true,會影響NaN判斷
    • Number.isNaN首先判斷是不是數字,是數字在去判斷是不是NaN,這種方法更準確。
    //?isNaN('sdasd')?true
    //?isNaN('21N')?true
    //?isNaN(NaN)??true
    //?isNaN(123)?false

    我們來看看Number.isNaN

    Number.isNaN('1232N')??//?false
    Number.isNaN('1232')????//?false
    Number.isNaN(21312)??//?false
    Number.isNaN('sadas')??//?false
    Number.isNaN(NaN)???//?true

    什么是可迭代對象

    要成為可迭代對象,?一個對象必須實現?@@iterator 方法。這意味著對象(或者它原型鏈上的某個對象)必須有一個鍵為?@@iterator 的屬性,可通過常量 Symbol.iterator 訪問該屬性:

    如何判斷一個類型是不是可迭代對象

    let?someString?=?"hi";
    typeof?someString[Symbol.iterator];??????????//?"function"

    「結論」

    • 常見的可迭代對象,有Array,Map, Set, String,TypeArray, arguments
    • 可以通過判斷Symbol.iterator判斷當前變量是否是可迭代對象

    arguments對象了解嗎

    這個arguments有個易錯點,容易忽略的點。

    首先我們看下它的定義:arguments對象是所有(非箭頭)函數中都可用的「局部變量」。此對象包含傳遞給函數的每個參數,第一個參數在索引0處。

    arguments對象不是一個 Array 。它類似于Array,但除了length屬性和索引元素之外沒有任何Array屬性。

    轉換成數組?

    let?args?=?Array.prototype.slice.call(arguments)
    let?args1?=?Array.from(arguments)
    let?args2?=?[...arguments]

    易錯點?

    當非嚴格模式中的函數「沒有」包含剩余參數、默認參數和解構賦值,那么arguments對象中的值「會」跟蹤參數的值(反之亦然),看幾個題目懂了

    function?func(a)?{?
    ??arguments[0]?=?99;???//?更新了arguments[0]?同樣更新了a
    ??console.log(a);
    }
    func(10);?//?99

    這里arguments就會跟蹤a變量?

    function?func(a)?{?
    ??a?=?99;??????????????//?更新了a?同樣更新了arguments[0]?
    ??console.log(arguments[0]);
    }
    func(10);?//?99

    當非嚴格模式中的函數「有」包含剩余參數、默認參數和解構賦值,那么arguments對象中的值「不會」跟蹤參數的值(反之亦然)。相反, arguments反映了調用時提供的參數:

    function?func(a?=?55)?{?
    ??arguments[0]?=?99;?//?updating?arguments[0]?does?not?also?update?a
    ??console.log(a);
    }
    func(10);?//?10

    并且

    function?func(a?=?55)?{?
    ??a?=?99;?//?updating?a?does?not?also?update?arguments[0]
    ??console.log(arguments[0]);
    }
    func(10);?//?10

    并且

    function?func(a?=?55)?{?
    ??console.log(arguments[0]);
    }
    func();?//?undefined

    原型

    • 在js中,我們通常會使用構造函數來創建一個對象,每一個構造函數的內部都有一個prototype屬性,這個屬性對應的值是一個對象,這個對象它包含了可以由該構造函數的所有實例都共享的屬性和方法,我們把它稱為原型。

    • 原型分為「顯示原型」「隱式原型」,一般稱prototype為顯示原型,__proto__稱為隱式原型。

    • 一般而言,__proto__這個指針我們應該獲取這個值,但是瀏覽器中都實現了 __proto__屬性來讓我們訪問這個屬性,但是我們最好不要使用這個屬性,因為它不是規范中規定的。

    • ES5 中新增了一個 Object.getPrototypeOf() 方法,我們可以通過這個方法來獲取對象的原型。

    舉個例子?

    為什么我們新建的對象可以使用toString()方法,這是因為我們訪問一個對象的屬性時,首先會在這個對象身上找,如果沒有的話,我們會通過這個對象的__proto__找到該對象的原型,然后在這個原型對象中找,這個原型對象又沒有的話,就這樣子通過一直找下去,這也就是「原型鏈概念」。直到找到原型鏈的盡頭也就是Object.prototype。

    js 獲取原型的方法?

    假設Demo是一個對象,那么有三種方式?

    • Demo.constructor.prototype
    • Demo.__proto__
    • Object.getPrototypeOf(Demo)

    獲取對象屬性的方法

  • Object.keys(testObj) ?返回的參數就是一個數組,數組內包括對象內可枚舉屬性和方法名
  • for in 遍歷的也可以,不過對于非繼承的屬性名稱也會獲取到,通過hasOwnproperty判斷
  • Object.getOwnPropertyNames(obj) 返回的參數就是一個數組,數組內包括自身擁有的枚舉或不可枚舉屬性名稱字符串,如果是數組的話,還有可能獲取到length屬性
  • for of 和 for in區別

    「for in」

    我們直接從一段代碼來看

    Array.prototype.method=function(){
    ??console.log(this.length);
    }
    var?myArray=[1,2,4,5,6,7]
    myArray.name="數組"
    for?(var?index?in?myArray)?{
    ??console.log(myArray[index]);
    }

    有哪些缺陷呢?

    • index獲取的是索引
    • 遍歷的順序可能不是按照順序進行的
    • 使用for in 會遍歷數組所有可枚舉屬性,包括原型。「例如上面的method和name都會遍歷」
    • for in 更適合遍歷對象,不要使用for in去遍歷數組

    「for of」

    Array.prototype.method=function(){
    ??console.log(this.length);
    }
    var?myArray=[1,2,4,5,6,7]
    myArray.name="數組";
    for?(var?value?of?myArray)?{
    ??console.log(value);
    }
    • for of語法遍歷的是數組元素的值
    • for in 遍歷的是索引
    • for of遍歷的只是數組內的元素,而不包括數組的原型屬性method和索引name

    「小結」

    • for..of適用遍歷數/數組對象/字符串/map/set等擁有迭代器對象的集合,不能遍歷對象,因為沒有迭代對象,與forEach()不同的是,它可以正確響應break、continue和return語句。
    • for in 可以遍歷一個普通的對象,這樣也是它的本質工作,for in會遍歷原型以及可枚舉屬性,最好的情況下,使用hasOwnProperty判斷是不是實例屬性。

    作用域鏈

    「作用域」 規定了如何查找變量,也就是確定當前執行代碼對變量的訪問權限。當查找變量的時候,會先從當前上下文的變量對象中查找,如果沒有找到,就會從父級(詞法層面上的父級)執行上下文的變量對象中查找,一直找到全局上下文的變量對象,也就是全局對象。這樣由多個執行上下文的變量對象構成的鏈表就叫做 「作用域鏈」。

    **函數的作用域在函數創建時就已經確定了。**當函數創建時,會有一個名為 [[scope]] 的內部屬性保存所有父變量對象到其中。當函數執行時,會創建一個執行環境,然后通過復制函數的 [[scope]] ?屬性中的對象構建起執行環境的作用域鏈,然后,變量對象 VO 被激活生成 AO 并添加到作用域鏈的前端,完整作用域鏈創建完成:

    Scope?=?[AO].concat([[Scope]]);

    所以閉包,可以說是作用域鏈的另外一種表示形式。

    閉包的應用

    閉包的應用比較典型是定義模塊,我們將操作函數暴露給外部,而細節隱藏在模塊內部

    閉包的第一個用途是使我們在函數外部能夠訪問到函數內部的變量。
    通過使用閉包,我們可以通過在外部調用閉包函數,從而在外部訪問到函數內部的變量,可以使用這種方法來創建私有變量。


    函數的另一個用途是使已經運行結束的函數上下文中的變量對象繼續留在內存中,因為閉包函數保留了這個變量對象的引用,所以這個變量對象不會被回收。

    ES6 語法知道哪些,分別怎么用?

    let const 塊級作用域 箭頭函數 詞法this Class 解構,剩余運算符,Promise等,往這些方面展開。

    手寫函數防抖和函數節流

    「節流throttle」

    規定在一個單位時間內,只能觸發一次函數。如果這個單位時間內觸發多次函數,只有一次生效。

    function?throttle(fn,?delay)?{
    ????????????let?flag?=?true,
    ????????????????timer?=?null
    ????????????return?function(...args)?{
    ????????????????let?context?=?this
    ????????????????if(!flag)?return
    ????????????????
    ????????????????flag?=?false
    ????????????????clearTimeout(timer)
    ????????????????timer?=?setTimeout(function()?{
    ????????????????????fn.apply(context,args)
    ????????????????????flag?=?true
    ????????????????},delay)
    ????????????}
    ????????}

    「防抖」

    在事件被觸發n秒后再執行回調,如果在這n秒內又被觸發,則重新計時。

    function?debounce(fn,?delay)?{
    ????????????let?timer?=?null
    ????????????return?function(...args)?{
    ????????????????let?context?=?this
    ????????????????if(timer)?clearTimeout(timer)
    ????????????????timer?=?setTimeout(function(){
    ????????????????????fn.apply(context,args)
    ????????????????},delay)
    ????????????}
    ????????}

    手寫AJAX

    function?ajax(url,?method)?{
    ??return?new?Promise((resolve,?reject)?=>?{
    ????const?xhr?=?new?XMLHttpRequest()
    ????xhr.open(url,?method,?true)
    ????xhr.onreadystatechange?=?function?()?{
    ??????if?(xhr.readyState?===?4)?{
    ????????if?(xhr.status?===?200)?{
    ??????????resolve(xhr.responseText)
    ????????}?else?if?(xhr.status?===?404)?{
    ??????????reject(new?Error('404'))
    ????????}
    ??????}?else?{
    ????????reject('請求數據失敗')
    ??????}
    ????}
    ????xhr.send(null)
    ??})
    }

    數組去重

    function?unique_3(array)?{
    ????var?obj?=?{};
    ????return?array.filter(function?(item,?index,?array)?{
    ????????return?obj.hasOwnProperty(typeof?item?+?item)???false?:?(obj[typeof?item?+?item]?=?true)
    ????})
    }

    手寫bind函數

    Function.prototype.mybind?=?function(context,?...args)?{
    ????return?(...newArgs)?=>?{
    ????????return?this.call(context,?...args,?...newArgs)
    ????}
    }

    實現call

    Function.prototype.mycall?=?function?(context,?...args)?{
    ????context?=?Object(context)?||?window
    ????let?fn?=?Symbol(1)
    ????context[fn]?=?this
    ????let?result?=?context[fn](...args)
    ????delete?context[fn]
    ????return?result
    }

    實現一個快排

    function?quickSort(arr){

    ????if?(arr.length?<=?1)?return?arr;
    ????let?index?=?Math.floor(arr.length?/?2)
    ????let?pivot?=?arr.splice(index,?1)[0],
    ????????left?=?[],
    ????????right?=?[];
    ????for(let?i?=?0;?i?????????if(pivot?>?arr[i]){
    ????????????left.push(arr[i])
    ????????}else{
    ????????????right.push(arr[i])
    ????????}
    ????}
    ????return?quickSort(left).concat([pivot],quickSort(right))
    }

    數組的扁平化

    function?flatDeep(arr)?{
    ????return?arr.reduce((res,?cur)?=>?{
    ????????if(Array.isArray(cur)){
    ????????????return?[...res,?...flatDeep(cur)]
    ????????}else{
    ????????????return?[...res,?cur]
    ????????}
    ????},[])
    }

    深拷貝

    function?deepClone(obj,?hash?=?new?WeakMap())?{
    ????if?(obj?instanceof?RegExp)?return?new?RegExp(obj)
    ????if?(obj?instanceof?Date)?return?new?Date(obj)

    ????if?(obj?===?null?||?typeof?obj?!==?'object')?return?obj

    ????if?(hash.has(obj))?return?obj

    ????let?res?=?new?obj.constructor();
    ????hash.set(obj,?res)
    ????for?(let?key?in?obj)?{
    ????????if?(obj.hasOwnProperty(key))?{
    ????????????res[key]?=?deepClone(obj[key],hash)
    ????????}
    ????}
    ????return?res
    }

    實現高階函數柯里化

    function?currying(fn,?...args)?{
    ????if?(fn.length?>?args.length)?{
    ????????return?(...newArgs)?=>?currying(fn,?...args,?...newArgs)
    ????}?else?{
    ????????return?fn(...args)
    ????}
    }

    寄生組合式繼承

    function?inherit(Son,?Father)?{
    ????//?創建對象,創建父類原型的一個副本
    ????let?prototype?=?Object.create(Father.prototype)
    ????//?增強對象,彌補因重寫原型而失去的默認的constructor?屬性
    ????prototype.construct?=?Son
    ?????//?指定對象,將新創建的對象賦值給子類的原型
    ????Son.prototype?=?prototype
    }

    this

    「this 永遠指向最后調用它的那個對象」

    主要有下面幾個規則

    • 默認指向,作為普通函數調用,指向window,嚴格模式下指向undefined
    • 使用call/apply/bind 顯示改變this指向
    • new對象,被實例調用,指向的就是實例對象
    • 箭頭函數:this指向的是上級作用域中的this
    • class方法:該this指向的就是實例

    ECMAScript6 怎么寫 class,為什么會出現 class 這種東西?

    ?

    在我看來 ES6 新添加的 class 只是為了補充 js 中缺少的一些面向對象語言的特性,但本質上來說它只是一種語法糖,不是一個新的東西,其背后還是原型繼承的思想。通過加入 class 可以有利于我們更好的組織代碼。在 class 中添加的方法,其實是添加在類的原型上的。

    ?

    哪些操作會造成內存泄漏?

    相關知識點:

    • 1.意外的全局變量
    • 2.被遺忘的計時器或回調函數
    • 3.脫離 DOM 的引用
    • 4.閉包
    第一種情況是我們由于使用未聲明的變量,而意外的創建了一個全局變量,而使這個變量一直留在內存中無法被回收。

    第二種情況是我們設置了?setInterval?定時器,而忘記取消它,如果循環函數有對外部變量的引用的話,那么這個變量會被一直留
    在內存中,而無法被回收。

    第三種情況是我們獲取一個?DOM?元素的引用,而后面這個元素被刪除,由于我們一直保留了對這個元素的引用,所以它也無法被回
    收。

    第四種情況是不合理的使用閉包,從而導致某些變量一直被留在內存當中。

    Object.is()使用過嗎?跟 === 和 == 區別

    • 兩等號判等,會在比較時進行類型轉換。
    • 三等號判等(判斷嚴格),比較時不進行隱式類型轉換,(類型不同則會返回false)
    • 使用 Object.is 來進行相等判斷時,一般情況下和三等號的判斷相同,它處理了一些特殊的情況,比如 -0 和 +0 不再相等,兩個 NaN 認定為是相等的。

    JS事件循環機制了解嗎

    • 因為 js 是單線程運行的,在代碼執行的時候,通過將不同函數的執行上下文壓入執行棧中來保證代碼的有序執行。
    • 在執行同步代碼的時候,如果遇到了異步事件,js 引擎并不會一直等待其返回結果,而是會將這個事件掛起,繼續執行執行棧中的其他任務。
    • 當異步事件執行完畢后,再將異步事件對應的回調加入到與當前執行棧中不同的另一個任務隊列中等待執行。
    • 任務隊列可以分為宏任務對列和微任務對列,當前執行棧中的事件執行完畢后,js 引擎首先會判斷微任務對列中是否有任務可以執行,如果有就將微任務隊首的事件壓入棧中執行。
    • 當微任務對列中的任務都執行完成后再去判斷宏任務對列中的任務。

    微任務包括了 promise 的回調、node 中的 process.nextTick 、對 Dom 變化監聽的 MutationObserver。

    宏任務包括了 script 腳本的執行、setTimeout ,setInterval ,setImmediate 一類的定時事件,還有如 I/O 操作、UI 渲染等。

    立即執行函數是什么?

    聲明一個函數,并馬上調用這個匿名函數就叫做立即執行函數;也可以說立即執行函數是一種語法,讓你的函數在定義以后立即執行;

    寫法?

    (function?()?{alert("我是匿名函數")}())???//用括號把整個表達式包起來
    (function?()?{alert("我是匿名函數")})()??//用括號把函數包起來
    !function?()?{alert("我是匿名函數")}()??//求反,我們不在意值是多少,只想通過語法檢查
    +function?()?{alert("我是匿名函數")}()?
    -function?()?{alert("我是匿名函數")}()?
    ~function?()?{alert("我是匿名函數")}()?
    void?function?()?{alert("我是匿名函數")}()?
    new?function?()?{alert("我是匿名函數")}()?

    作用:

  • 不必為函數命名,避免了污染全局變量
  • 立即執行函數內部形成了一個單獨的作用域,可以封裝一些外部無法讀取的私有變量
  • 封裝變量
  • 什么是 JSONP,什么是 CORS,什么是跨域?

    這個我有篇文章已經總結啦,所以這里就直接跳到對應文章吧,傳送門

    發布訂閱者模式

    class?EventEmitter?{
    ????constructor(){
    ????????this.list?=?{}
    ????}
    ????on(key,fn){
    ????????if(!this.list[key]){
    ????????????this.list[key]?=?[]
    ????????}
    ????????this.list[key].push(fn)
    ????????return?this
    ????}
    ????once(key,fn)?{
    ????????if(!this.list[key]){
    ????????????this.list[key]?=?[]
    ????????}
    ????????this.list[key].push(fn)
    ????????this.list[key].flag?=?this.list[key].length;
    ????????return?this
    ????}
    ????emit(key,?args){
    ????????let?that?=?this;
    ????????let?fns?=?this.list[key]
    ????????if(!fns?||?fns.length?===?0)?return?false
    ????????for(let?i?=?0;?i?????????????fns[i].apply(this,?args)
    ????????????if(fns.flag?===?i){
    ????????????????that.off(key,fns[i-1])
    ????????????}
    ????????}
    ????}
    ????off(key,fn)?{
    ????????let?fns?=?this.list[key];
    ????????let?len?=?fns.length,
    ????????????k?=?-1;
    ????????for(let?i?=?0;?i?????????????if(fns[i].name?===?fn.name){?//?刪除
    ????????????????k?=?i;
    ????????????????break;
    ????????????}
    ????????}
    ????????if(k?!==?-1)?{
    ????????????this.list[key].splice(k,1)
    ????????}
    ????}

    ????allOff(key)?{
    ????????if(key?===?undefined){
    ????????????this.list?=?{}
    ????????}else{
    ????????????this.list[key]?=?[]
    ????????}
    ????}
    }

    下面是測試數據

    var?emitter?=?new?EventEmitter();

    function?handleOne(a,?b,?c)?{
    ????console.log('第一個監聽函數',?a,?b,?c)
    }

    function?handleSecond(a,?b,?c)?{
    ????console.log('第二個監聽函數',?a,?b,?c)
    }

    function?handleThird(a,?b,?c)?{
    ????console.log('第三個監聽函數',?a,?b,?c)
    }

    emitter.on("demo",?handleOne)
    ????.once("demo",?handleSecond)
    ????.on("demo",?handleThird);

    emitter.emit('demo',?[1,?2,?3]);
    //?=>?第一個監聽函數?1?2?3
    //?=>?第二個監聽函數?1?2?3
    //?=>?第三個監聽函數?1?2?3

    emitter.off('demo',?handleThird);
    emitter.emit('demo',?[1,?2,?3]);
    //?=>?第一個監聽函數?1?2?3

    emitter.allOff();
    emitter.emit('demo',?[1,?2,?3]);
    //?nothing

    瀏覽器相關

    這個瀏覽器專題的話,我之前也總結過啦,所以這里就貼出地址,有興趣的可以去補一補基礎知識,大部分的知識點下面也提及到了,就不單獨拿出來梳理啦?

    往期文章總結

    • 「查缺補漏」送你18道瀏覽器面試題(780+?)

    • 「瀏覽器工作原理」寫給女友的秘籍-瀏覽器組成&網絡請求篇(1.2W字)(270+?)

    • 「瀏覽器工作原理」寫給女友的秘籍-渲染流程篇(1.1W字)(280+?)

    Cookie V.S. LocalStorage V.S. SessionStorage V.S. Session

    其中的一個相同點,就是它們保存在瀏覽器端,且同源的。

    那么不同點是哪些呢?

    異同點

    分類生命周期存儲容量存儲位置
    cookie默認保存在內存中,隨瀏覽器關閉失效(如果設置過期時間,在到過期時間后失效)4KB保存在客戶端,每次請求時都會帶上
    localStorage理論上永久有效的,除非主動清除。4.98MB(不同瀏覽器情況不同,safari 2.49M)保存在客戶端,不與服務端交互。節省網絡流量
    sessionStorage僅在當前網頁會話下有效,關閉頁面或瀏覽器后會被清除。4.98MB(部分瀏覽器沒有限制)同上

    操作方式

    接下來我們來具體看看如何來操作localStorage和sessionStorage

    let?obj?=?{?name:?"TianTianUp",?age:?18?};
    localStorage.setItem("name",?"TianTianUp");?
    localStorage.setItem("info",?JSON.stringify(obj));
    復制代碼

    接著進入相同的域名時就能拿到相應的值?

    let?name?=?localStorage.getItem("name");
    let?info?=?JSON.parse(localStorage.getItem("info"));
    復制代碼

    從這里可以看出,localStorage其實存儲的都是字符串,如果是存儲對象需要調用JSON的stringify方法,并且用JSON.parse來解析成對象。

    應用場景

    • localStorage 適合持久化緩存數據,比如頁面的默認偏好配置,如官網的logo,存儲Base64格式的圖片資源等;
    • sessionStorage 適合一次性臨時數據保存,存儲本次瀏覽信息記錄,這樣子頁面關閉的話,就不需要這些記錄了,還有對表單信息進行維護,這樣子頁面刷新的話,也不會讓表單信息丟失。

    什么是 XSS?如何預防?

    XSS 全稱是 Cross Site Scripting ,為了與CSS區分開來,故簡稱 XSS,翻譯過來就是“跨站腳本”。

    XSS是指黑客往 HTML 文件中或者 DOM 中注入惡意腳本,從而在用戶瀏覽頁面時利用注入的惡意腳本對用戶實施攻擊的一種手段。

    最開始的時候,這種攻擊是通過跨域來實現的,所以叫“跨域腳本”。發展到現在,往HTML文件中中插入惡意代碼方式越來越多,所以是否跨域注入腳本已經不是唯一的注入手段了,但是 XSS 這個名字卻一直保留至今。

    注入惡意腳本可以完成這些事情:

  • 竊取Cookie
  • 監聽用戶行為,比如輸入賬號密碼后之間發給黑客服務器
  • 在網頁中生成浮窗廣告
  • 修改DOM偽造登入表單
  • 一般的情況下,XSS攻擊有三種實現方式

    • 存儲型 XSS 攻擊
    • 反射型 XSS 攻擊
    • 基于 DOM 的 XSS 攻擊

    存儲型 XSS 攻擊

    存儲型 XSS 攻擊大致步驟如下:

  • 首先黑客利用站點漏洞將一段惡意 JavaScript 代碼提交到網站的數據庫中;
  • 然后用戶向網站請求包含了惡意 JavaScript 腳本的頁面;
  • 當用戶瀏覽該頁面的時候,惡意腳本就會將用戶的 Cookie 信息等數據上傳到服務器。
  • 比如常見的場景:

    在評論區提交一份腳本代碼,假設前后端沒有做好轉義工作,那內容上傳到服務器,在頁面渲染的時候就會直接執行,相當于執行一段未知的JS代碼。這就是存儲型 XSS 攻擊。

    反射型 XSS 攻擊

    反射型 XSS 攻擊指的就是惡意腳本作為**「網絡請求的一部分」**,隨后網站又把惡意的JavaScript腳本返回給用戶,當惡意 JavaScript 腳本在用戶頁面中被執行時,黑客就可以利用該腳本做一些惡意操作。

    舉個例子:

    http://TianTianUp.com?query=
    復制代碼

    如上,服務器拿到后解析參數query,最后將內容返回給瀏覽器,瀏覽器將這些內容作為HTML的一部分解析,發現是Javascript腳本,直接執行,這樣子被XSS攻擊了。

    這也就是反射型名字的由來,將惡意腳本作為參數,通過網絡請求,最后經過服務器,在反射到HTML文檔中,執行解析。

    主要注意的就是,「「服務器不會存儲這些惡意的腳本,這也算是和存儲型XSS攻擊的區別吧」」。

    基于 DOM 的 XSS 攻擊

    基于 DOM 的 XSS 攻擊是不牽涉到頁面 Web 服務器的。具體來講,黑客通過各種手段將惡意腳本注入用戶的頁面中,在數據傳輸的時候劫持網絡數據包

    常見的劫持手段有:

    • WIFI路由器劫持
    • 本地惡意軟件

    阻止 XSS 攻擊的策略

    以上講述的XSS攻擊原理,都有一個共同點:讓惡意腳本直接在瀏覽器執行。

    針對三種不同形式的XSS攻擊,有以下三種解決辦法

    「對輸入腳本進行過濾或轉碼」

    對用戶輸入的信息過濾或者是轉碼

    舉個例子?

    轉碼后?

    >script#39;你受到XSS攻擊了')>/script<

    這樣的代碼在 html 解析的過程中是無法執行的。

    當然了對于、、等關鍵字標簽也是可以過來的,效果如下?


    最后什么都沒有剩下了

    「利用 CSP」

    該安全策略的實現基于一個稱作 Content-Security-Policy的 HTTP 首部。

    可以移步MDN,有更加規范的解釋。我在這里就是梳理一下吧。

    CSP,即瀏覽器中的內容安全策略,它的核心思想大概就是服務器決定瀏覽器加載哪些資源,具體來說有幾個功能?

    • 限制加載其他域下的資源文件,這樣即使黑客插入了一個 JavaScript 文件,這個 JavaScript 文件也是無法被加載的;
    • 禁止向第三方域提交數據,這樣用戶數據也不會外泄;
    • 提供上報機制,能幫助我們及時發現 XSS 攻擊。
    • 禁止執行內聯腳本和未授權的腳本;

    「利用 HttpOnly」

    由于很多 XSS 攻擊都是來盜用 Cookie 的,因此還可以通過使用 HttpOnly 屬性來保護我們 Cookie 的安全。這樣子的話,JavaScript 便無法讀取 Cookie 的值。這樣也能很好的防范 XSS 攻擊。

    通常服務器可以將某些 Cookie 設置為 HttpOnly 標志,HttpOnly 是服務器通過 HTTP 響應頭來設置的,下面是打開 Google 時,HTTP 響應頭中的一段:

    set-cookie:?NID=189=M8l6-z41asXtm2uEwcOC5oh9djkffOMhWqQrlnCtOI;?expires=Sat,?18-Apr-2020?06:52:22?GMT;?path=/;?domain=.google.com;?HttpOnly

    總結

    XSS 攻擊是指瀏覽器中執行惡意腳本, 然后拿到用戶的信息進行操作。主要分為存儲型、反射型和文檔型。防范的措施包括:

    • 對輸入內容過濾或者轉碼,尤其是類似于、、標簽
    • 利用CSP
    • 利用Cookie的HttpOnly屬性

    除了以上策略之外,我們還可以通過添加驗證碼防止腳本冒充用戶提交危險操作。而對于一些不受信任的輸入,還可以限制其輸入長度,這樣可以增大 XSS 攻擊的難度。

    什么是 CSRF?如何預防?

    CSRF 英文全稱是 Cross-site request forgery,所以又稱為“跨站請求偽造”,是指黑客引誘用戶打開黑客的網站,在黑客的網站中,利用用戶的登錄狀態發起的跨站請求。簡單來講,「CSRF 攻擊就是黑客利用了用戶的登錄狀態,并通過第三方的站點來做一些壞事?!?/strong>

    一般的情況下,點開一個誘導你的鏈接,黑客會在你不知情的時候做哪些事情呢

    1. 自動發起 Get 請求

    黑客網頁里面可能有一段這樣的代碼?


    在受害者訪問含有這個img的頁面后,瀏覽器會自動向http://bank.example/withdraw?account=xiaoming&amount=10000&for=hacker發出一次HTTP請求。

    bank.example就會收到包含受害者登錄信息的一次跨域請求。

    2. 自動發起 POST 請求

    黑客網頁中有一個表單,自動提交的表單?

    ?"http://bank.example/withdraw"?method=POST>

    訪問該頁面后,表單會自動提交,相當于模擬用戶完成了一次POST操作。

    同樣也會攜帶相應的用戶 cookie 信息,讓服務器誤以為是一個正常的用戶在操作,讓各種惡意的操作變為可能。

    3. 引誘用戶點擊鏈接

    這種需要誘導用戶去點擊鏈接才會觸發,這類的情況比如在論壇中發布照片,照片中嵌入了惡意鏈接,或者是以廣告的形式去誘導,比如:


    重磅消息!!!

    點擊后,自動發送 get 請求,接下來和自動發 GET 請求部分同理。

    以上三種情況,就是CSRF攻擊原理,跟XSS對比的話,CSRF攻擊并不需要將惡意代碼注入HTML中,而是跳轉新的頁面,利用「服務器的驗證漏洞」「用戶之前的登錄狀態」來模擬用戶進行操作

    「防護策略」

    其實我們可以想到,黑客只能借助受害者的**cookie**騙取服務器的信任,但是黑客并不能憑借拿到「cookie」,也看不到 「cookie」的內容。另外,對于服務器返回的結果,由于瀏覽器「同源策略」的限制,黑客也無法進行解析。

    ?

    這就告訴我們,我們要保護的對象是那些可以直接產生數據改變的服務,而對于讀取數據的服務,則不需要進行**CSRF**的保護。而保護的關鍵,是 「在請求中放入黑客所不能偽造的信息」

    ?

    「用戶操作限制——驗證碼機制」

    方法:添加驗證碼來識別是不是用戶主動去發起這個請求,由于一定強度的驗證碼機器無法識別,因此危險網站不能偽造一個完整的請求。

    「1. 驗證來源站點」

    在服務器端驗證請求來源的站點,由于大量的CSRF攻擊來自第三方站點,因此服務器跨域禁止來自第三方站點的請求,主要通過HTTP請求頭中的兩個Header

    • Origin Header
    • Referer Header

    這兩個Header在瀏覽器發起請求時,大多數情況會自動帶上,并且不能由前端自定義內容。

    服務器可以通過解析這兩個Header中的域名,確定請求的來源域。

    其中,「Origin」只包含域名信息,而「Referer」包含了具體的 URL 路徑。

    在某些情況下,這兩者都是可以偽造的,通過AJax中自定義請求頭即可,安全性略差。

    「2. 利用Cookie的SameSite屬性」

    可以看看MDN對此的解釋

    SameSite可以設置為三個值,Strict、Lax和None。

  • 在Strict模式下,瀏覽器完全禁止第三方請求攜帶Cookie。比如請求sanyuan.com網站只能在sanyuan.com域名當中請求才能攜帶 Cookie,在其他網站請求都不能。
  • 在Lax模式,就寬松一點了,但是只能在 get 方法提交表單況或者a 標簽發送 get 請求的情況下可以攜帶 Cookie,其他情況均不能。
  • 在None模式下,Cookie將在所有上下文中發送,即允許跨域發送。
  • 「3. CSRF Token」

    前面講到CSRF的另一個特征是,攻擊者無法直接竊取到用戶的信息(Cookie,Header,網站內容等),僅僅是冒用Cookie中的信息。

    那么我們可以使用Token,在不涉及XSS的前提下,一般黑客很難拿到Token。

    可以看看這篇文章,將了Token是怎么操作的?徹底理解cookie,session,token

    Token(令牌)做為Web領域驗證身份是一個不錯的選擇,當然了,JWT有興趣的也可以去了解一下。

    Token步驟如下:

    「第一步:將CSRF Token輸出到頁面中」

    ?

    首先,用戶打開頁面的時候,服務器需要給這個用戶生成一個Token,該Token通過加密算法對數據進行加密,一般Token都包括隨機字符串和時間戳的組合,顯然在提交時Token不能再放在Cookie中了(XSS可能會獲取Cookie),否則又會被攻擊者冒用。因此,為了安全起見Token最好還是存在服務器的Session中,之后在每次頁面加載時,使用JS遍歷整個DOM樹,對于DOM中所有的a和form標簽后加入Token。這樣可以解決大部分的請求,但是對于在頁面加載之后動態生成的HTML代碼,這種方法就沒有作用,還需要程序員在編碼時手動添加Token。

    ?

    「第二步:頁面提交的請求攜帶這個Token」

    ?

    對于GET請求,Token將附在請求地址之后,這樣URL 就變成 http://url?csrftoken=tokenvalue。而對于 POST 請求來說,要在 form 的最后加上:這樣,就把Token以參數的形式加入請求了。

    ?

    「第三步:服務器驗證Token是否正確」

    ?

    當用戶從客戶端得到了Token,再次提交給服務器的時候,服務器需要判斷Token的有效性,驗證過程是先解密Token,對比加密字符串以及時間戳,如果加密字符串一致且時間未過期,那么這個Token就是有效的。

    ?

    非常感興趣的,可以仔細去閱讀一下相關的文章,Token是如何加密的,又是如何保證不被攻擊者獲取道。

    總結

    CSRF(Cross-site request forgery), 即跨站請求偽造,本質是沖著瀏覽器分不清發起請求是不是真正的用戶本人,所以防范的關鍵在于在請求中放入黑客所不能偽造的信息。從而防止黑客偽造一個完整的請求欺騙服務器。

    「防范措施」:驗證碼機制,驗證來源站點,利用Cookie的SameSite屬性,CSRF Token

    JS 垃圾回收機制

    這部分的知識點,基本上看別人寫的翻譯,然后按照別人的思路去完成的,所以這里就推薦一篇我看的文章吧,個人覺得寫的還是挺好的,所以有興趣的可以了解一下,下面的文章?

    簡單了解JavaScript垃圾回收機制

    計算機網絡部分

    這個專題也十分的重要,面試大廠的話,這個你得會,不問就不要緊,但是問到你的話,必須的會,我之前梳理過一篇文章,效果還不錯,這里分享給大家?

    往期文章

    • 「查缺補漏」鞏固你的HTTP知識體系(930+?)

    HTTP 狀態碼知道哪些?分別什么意思?

    狀態碼:由3位數字組成,第一個數字定義了響應的類別

    「1xx:指示信息,表示請求已接收,繼續處理」

    「2xx:成功,表示請求已被成功接受,處理?!?/strong>

    200 OK:客戶端請求成功
    204 No Content:無內容。服務器成功處理,但未返回內容。一般用在只是客戶端向服務器發送信息,而服務器不用向客戶端返回什么信息的情況。不會刷新頁面。
    206 Partial Content:服務器已經完成了部分GET請求(客戶端進行了范圍請求)。響應報文中包含Content-Range指定范圍的實體內容

    「3xx:重定向」

    301?Moved Permanently:永久重定向,表示請求的資源已經永久的搬到了其他位置。

    302?Found:臨時重定向,表示請求的資源臨時搬到了其他位置

    303?See Other:臨時重定向,應使用GET定向獲取請求資源。303功能與302一樣,區別只是303明確客戶端應該使用GET訪問

    307?Temporary Redirect:臨時重定向,和302有著相同含義。POST不會變成GET

    304?Not Modified:表示客戶端發送附帶條件的請求(GET方法請求報文中的IF…)時,條件不滿足。返回304時,不包含任何響應主體。雖然304被劃分在3XX,但和重定向一毛錢關系都沒有

    「4xx:客戶端錯誤」

    400 Bad Request:客戶端請求有語法錯誤,服務器無法理解。
    401 Unauthorized:請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用。
    403 Forbidden:服務器收到請求,但是拒絕提供服務
    404 Not Found:請求資源不存在。比如,輸入了錯誤的url
    415?Unsupported?media?type:不支持的媒體類型

    「5xx:服務器端錯誤,服務器未能實現合法的請求?!?/strong>

    500 Internal Server Error:服務器發生不可預期的錯誤。
    503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間后可能恢復正常

    長輪詢和短輪詢

    「短輪詢」

    短輪詢(Polling)的實現思路就是瀏覽器端「每隔幾秒鐘向」服務器端**發送http請求,服務端在收到請求后,不論是否有數據更新,都直接進行響應。**在服務端響應完成,就會關閉這個Tcp連接。

    • 優點:就是兼容性比較好,只要支持http協議就可以實現該方式。
    • 缺點:很明顯消耗資源,因為下一次的建立Tcp是非常消耗資源的,服務器端響應后就會關閉這個Tcp連接。
    function?LongAjax()?{
    ????fetch(url).then(data?=>?{
    ????????//?數據正確拿到后,dosometing
    ????????
    ????}).catch(err?=>?{
    ????????//?發現錯誤,比如返回的數據為空等。
    ????????console.log(err);
    ????});
    }
    setInterval(LongAjax,?5000);

    「長輪詢」

    客戶端發送請求后服務器端「不會立即」返回數據,服務器端會「阻塞請求」連接不會「立即斷開」,直到服務器端「有數據更新或者是連接超時」才返回,客戶端才再次發出請求新建連接、如此反復從而獲取最新數據。

    function?LongAjax()?{
    ????fetch(url).then(data?=>?{
    ?????//?數據正確拿到后,
    ????????LongPolling();
    ????}).catch(err?=>?{
    ?????//?出錯或者就是超時間
    ????????LongPolling();
    ????????
    ????});
    }
    LongAjax()
    • 優點:長輪詢與短輪詢相比,明顯減少了很多不必要的http請求,節約資源。
    • 節點:連接掛起也會導致資源的浪費,停留在服務器端。

    HTTP 緩存有哪幾種?

    瀏覽器緩存是性能優化的一個重要手段,對于理解緩存機制而言也是很重要的,我們來梳理一下吧?

    強緩存

    強緩存兩個相關字段,「「Expires」」「「Cache-Control」」。

    「「強緩存分為兩種情況,一種是發送HTTP請求,一種不需要發送?!埂?/strong>

    首先檢查強緩存,這個階段**不需要發送HTTP請求。**通過查找不同的字段來進行,不同的HTTP版本所以不同。

    • HTTP1.0版本,使用的是Expires,HTTP1.1使用的是Cache-Control

    Expires

    Expires即過期時間,時間是相對于服務器的時間而言的,存在于服務端返回的響應頭中,在這個過期時間之前可以直接從緩存里面獲取數據,無需再次請求。比如下面這樣:

    Expires:Mon,?29?Jun?2020?11:10:23?GMT
    復制代碼

    表示該資源在2020年7月29日11:10:23過期,過期時就會重新向服務器發起請求。

    這個方式有一個問題:「「服務器的時間和瀏覽器的時間可能并不一致」」,所以HTTP1.1提出新的字段代替它。

    Cache-Control

    HTTP1.1版本中,使用的就是該字段,這個字段采用的時間是過期時長,對應的是max-age。

    Cache-Control:max-age=6000
    復制代碼

    上面代表該資源返回后6000秒,可以直接使用緩存。

    當然了,它還有其他很多關鍵的指令,梳理了幾個重要的?

    注意點:

    • 當Expires和Cache-Control同時存在時,優先考慮Cache-Control。
    • 當然了,當緩存資源失效了,也就是沒有命中強緩存,接下來就進入協商緩存?

    協商緩存

    強緩存失效后,瀏覽器在請求頭中攜帶響應的緩存Tag來向服務器發送請求,服務器根據對應的tag,來決定是否使用緩存。

    緩存分為兩種,「「Last-Modified」」「「ETag」」。兩者各有優勢,并不存在誰對誰有絕對的優勢,與上面所講的強緩存兩個Tag所不同。

    Last-Modified

    這個字段表示的是**「最后修改時間」**。在瀏覽器第一次給服務器發送請求后,服務器會在響應頭中加上這個字段。

    瀏覽器接收到后,「「如果再次請求」」,會在請求頭中攜帶If-Modified-Since字段,這個字段的值也就是服務器傳來的最后修改時間。

    服務器拿到請求頭中的If-Modified-Since的字段后,其實會和這個服務器中該資源的最后修改時間對比:

    • 如果請求頭中的這個值小于最后修改時間,說明是時候更新了。返回新的資源,跟常規的HTTP請求響應的流程一樣。
    • 否則返回304,告訴瀏覽器直接使用緩存。

    ETag

    ETag是服務器根據當前文件的內容,對文件生成唯一的標識,比如MD5算法,只要里面的內容有改動,這個值就會修改,服務器通過把響應頭把該字段給瀏覽器。

    瀏覽器接受到ETag值,會在下次請求的時候,將這個值作為**「If-None-Match」**這個字段的內容,發給服務器。

    服務器接收到**「If-None-Match」「后,會跟服務器上該資源的」「ETag」**進行比對?

    • 如果兩者一樣的話,直接返回304,告訴瀏覽器直接使用緩存
    • 如果不一樣的話,說明內容更新了,返回新的資源,跟常規的HTTP請求響應的流程一樣

    兩者對比

    • 性能上,Last-Modified優于ETag,Last-Modified記錄的是時間點,而Etag需要根據文件的MD5算法生成對應的hash值。
    • 精度上,ETag``Last-Modified``ETag``Last-Modified
      • 編輯了資源文件,但是文件內容并沒有更改,這樣也會造成緩存失效。
      • Last-Modified 能夠感知的單位時間是秒,如果文件在 1 秒內改變了多次,那么這時候的 Last-Modified 并沒有體現出修改了。

    最后,「「如果兩種方式都支持的話,服務器會優先考慮ETag」」。

    緩存位置

    接下來我們考慮使用緩存的話,緩存的位置在哪里呢?

    瀏覽器緩存的位置的話,可以分為四種,優先級從高到低排列分別?

    • Service Worker
    • Memory Cache
    • Disk Cache
    • Push Cache

    Service Worker

    這個應用場景比如PWA,它借鑒了Web Worker思路,由于它脫離了瀏覽器的窗體,因此無法直接訪問DOM。它能完成的功能比如:離線緩存、消息推送和網絡代理,其中離線緩存就是**「Service Worker Cache」**。

    Memory Cache

    指的是內存緩存,從效率上講它是最快的,從存活時間來講又是最短的,當渲染進程結束后,內存緩存也就不存在了。

    Disk Cache

    存儲在磁盤中的緩存,從存取效率上講是比內存緩存慢的,優勢在于存儲容量和存儲時長。

    Disk Cache VS Memory Cache

    兩者對比,主要的策略?

    內容使用率高的話,文件優先進入磁盤

    比較大的JS,CSS文件會直接放入磁盤,反之放入內存。

    Push Cache

    推送緩存,這算是瀏覽器中最后一道防線吧,它是HTTP/2的內容。具體我也不是很清楚,有興趣的可以去了解。

    總結

    • 首先檢查Cache-Control, 嘗鮮,看強緩存是否可用
    • 如果可用的話,直接使用
    • 否則進入協商緩存,發送HTTP請求,服務器通過請求頭中的If-Modified-Since或者If-None-Match字段檢查資源是否更新
    • 資源更新,返回資源和200狀態碼。
    • 否則,返回304,直接告訴瀏覽器直接從緩存中去資源。

    GET 和 POST 的區別

    首先,我們的知道區別只是語義上有區別而已,但是面試的時候,肯定不能這么回答的。

    • GET在瀏覽器回退時是無害的,而POST會再次提交請求。
    • GET請求會被瀏覽器主動cache,而POST不會,除非手動設置。
    • GET請求只能進行url編碼,而POST支持多種編碼方式。
    • GET請求參數會被完整保留在瀏覽器歷史記錄里,而POST中的參數不會被保留。
    • GET請求大小一般是(1024字節),http協議并沒有限制,而與服務器,操作系統有關,POST理論上來說沒有大小限制,http協議規范也沒有進行大小限制,但實際上post所能傳遞的數據量根據取決于服務器的設置和內存大小。
    • 對參數的數據類型,GET只接受ASCII字符,而POST沒有限制。
    • GET比POST更不安全,因為參數直接暴露在URL上,所以不能用來傳遞敏感信息。

    Webpack

    這個面試也是會經??嫉囊徊糠至?#xff0c;所以掌握它還是很有必要的,我是從0到1配過它的,所以這里我就沒有梳理筆記了,嗯,下面就推薦兩個文章,希望看完可以對你們有幫助。

    實打實的從0到1配置webpack?

    「一勞永逸」由淺入深配置webpack4

    針對面試的?

    關于webpack的面試題總結


    算法與數據結構

    這個專題,我目前總結了三個板塊,速度有點慢,不過面試初級前端的話,應該是沒有問題的,需要了解的小伙伴可以看看我梳理的三篇?

    往期文章

    • 「算法與數據結構」鏈表的9個基本操作(180+?)
    • 「算法與數據結構」梳理6大排序算法(210+?)
    • 「算法與數據結構」DFS和BFS算法之美(210+?)

    如果你跟我一樣,對算法也有所熱愛的話,我們可以互相討論下算法,或者關注我噠,我會一直更新算法噠。


    模塊化

    將一個復雜的程序依據特定的規則(規范)封裝成幾個文件,然后將其組合在一起,這些只是向外暴露一些接口,或者方法,與其他模塊進行通信,這樣子叫做是模塊化的過程。

    「為什么要模塊化」,目的在于減少復雜性,減少它們相互之間的功能關系。使每個模塊功能單一。

    「模塊化好處」

    • 避免了命名沖突(減少了命名空間污染)
    • 更好的分離,按需加載
    • 更高復用性
    • 高維護性

    CommomJS

    CommonJS定義了兩個主要概念:

    require函數,用于導入模塊

    module.exports變量,用于導出模塊

    require

    導入,代碼很簡單,let {count,addCount}=require("./utils")就可以了。

    require的第一步是解析路徑獲取到模塊內容:

    • 如果是核心模塊,比如fs,就直接返回模塊
    • 如果是帶有路徑的如/,./等等,則拼接出一個絕對路徑,然后先讀取緩存require.cache再讀取文件。如果沒有加后綴,則自動加后綴然后一一識別。
      • .js 解析為JavaScript 文本文件
      • .json解析JSON對象
      • .node解析為二進制插件模塊
    • 首次加載后的模塊會緩存在require.cache之中,所以多次加載require,得到的對象是同一個。
    • 在執行模塊代碼的時候,會將模塊包裝成如下模式,以便于作用域在模塊范圍之內。

    module

    let?count=0
    function?addCount(){
    ????count++
    }
    module.exports={count,addCount}

    然后根據require執行代碼時需要加上的,那么實際上我們的代碼長成這樣:

    (function(exports,?require,?module,?__filename,?__dirname)?{
    ????let?count=0
    ????function?addCount(){
    ????????count++
    ????}
    ????module.exports={count,addCount}
    });

    ES6模塊與CommonJS的區別

    CommonJS 模塊輸出的是一個值的拷貝,ES6 模塊輸出的是值的引用。

    • CommonJS 模塊輸出的是值的拷貝,也就是說,一旦輸出一個值,模塊內部的變化就影響不到這個值。

    • ES6 模塊的運行機制與 CommonJS 不一樣。JS 引擎對腳本靜態分析的時候,遇到模塊加載命令import,就會生成一個只讀引用。等到腳本真正執行時,再根據這個只讀引用,到被加載的那個模塊里面去取值。換句話說,ES6 的import有點像 Unix 系統的“符號連接”,原始值變了,import加載的值也會跟著變。因此,ES6 模塊是動態引用,并且不會緩存值,模塊里面的變量綁定其所在的模塊。

    CommonJS 模塊是運行時加載,ES6 模塊是編譯時輸出接口。

    • 運行時加載: CommonJS 模塊就是對象;即在輸入時是先加載整個模塊,生成一個對象,然后再從這個對象上面讀取方法,這種加載稱為“運行時加載”。

    • 編譯時加載: ES6 模塊不是對象,而是通過 export 命令顯式指定輸出的代碼,import時采用靜態命令的形式。即在import時可以指定加載某個輸出值,而不是加載整個模塊,這種加載稱為“編譯時加載”。

    模塊化開發怎么做?

    • 我對模塊的理解是,一個模塊是實現一個特定功能的一組方法。在最開始的時候,js 只實現一些簡單的功能,所以并沒有模塊的概念,但隨著程序越來越復雜,代碼的模塊化開發變得越來越重要。

    • 由于函數具有獨立作用域的特點,最原始的寫法是使用函數來作為模塊,幾個函數作為一個模塊,但是這種方式容易造成全局變量的污染,并且模塊間沒有聯系。

    • 后面提出了對象寫法,通過將函數作為一個對象的方法來實現,這樣解決了直接使用函數作為模塊的一些缺點,但是這種辦法會暴露所有的所有的模塊成員,外部代碼可以修改內部屬性的值。

    • 現在最常用的是立即執行函數的寫法,通過利用閉包來實現模塊私有作用域的建立,同時不會對全局作用域造成污染。

    ????歡迎留言討論???推薦閱讀?【JS面試題】用四種方式實現數組扁平化你會嗎

    ?【JS面試題】數組去重(6種方法)震驚面試官

    ?【超高頻面試題】這兩段代碼的返回結果你知道是什么嗎?

    ?【css面試題】用css畫0.5px的線條

    ?【css面試題】css實現氣泡框效果

    ?【css炫酷動畫】讓面試官眼前一亮的故障風格文字動畫

    END

    ?支持三連

    1.看到這里了就點個在看支持下吧,你的在看是我創作的動力。

    2.關注公眾號前端印象,「一起交流進步」

    3.關注公眾號回復【加群】,拉你進技術交流群一起玩轉前端。

    總結

    以上是生活随笔為你收集整理的webform 控件上面能写 前端事件吗_详细的网易前端秘籍—如何准备面试的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    呦交小u女精品视频 | 色 综合 欧美 亚洲 国产 | 欧美成人午夜精品久久久 | 中文无码精品a∨在线观看不卡 | 国产午夜亚洲精品不卡 | 婷婷丁香五月天综合东京热 | 久久精品成人欧美大片 | 亚洲综合伊人久久大杳蕉 | 免费无码午夜福利片69 | 欧美怡红院免费全部视频 | 亚洲中文字幕乱码av波多ji | 成人无码精品1区2区3区免费看 | 午夜成人1000部免费视频 | 欧美日本精品一区二区三区 | 欧美日本精品一区二区三区 | 18禁黄网站男男禁片免费观看 | 国产精品毛多多水多 | 国产熟妇高潮叫床视频播放 | 欧美成人家庭影院 | 伊人久久大香线焦av综合影院 | 少妇人妻偷人精品无码视频 | 国产人妻久久精品二区三区老狼 | 欧美亚洲国产一区二区三区 | 丝袜美腿亚洲一区二区 | 中文字幕无码乱人伦 | 18禁黄网站男男禁片免费观看 | 永久免费观看国产裸体美女 | 亚洲人成影院在线观看 | 自拍偷自拍亚洲精品10p | 激情亚洲一区国产精品 | 国产精品美女久久久久av爽李琼 | 色五月丁香五月综合五月 | 日欧一片内射va在线影院 | 精品一二三区久久aaa片 | 欧美激情内射喷水高潮 | 99久久人妻精品免费二区 | 午夜无码人妻av大片色欲 | 国产人妻大战黑人第1集 | 久久久久久亚洲精品a片成人 | 日韩精品a片一区二区三区妖精 | 日本欧美一区二区三区乱码 | 日本一本二本三区免费 | 麻豆md0077饥渴少妇 | 国产明星裸体无码xxxx视频 | 国产农村乱对白刺激视频 | 亚洲狠狠色丁香婷婷综合 | 性欧美大战久久久久久久 | 青青青爽视频在线观看 | 国产午夜精品一区二区三区嫩草 | 国产香蕉尹人综合在线观看 | 丝袜 中出 制服 人妻 美腿 | 久久亚洲中文字幕无码 | 狂野欧美性猛xxxx乱大交 | 人妻少妇精品久久 | 亚洲色www成人永久网址 | 99久久精品无码一区二区毛片 | 久久亚洲日韩精品一区二区三区 | 婷婷五月综合缴情在线视频 | 黑人巨大精品欧美一区二区 | 中文精品无码中文字幕无码专区 | 鲁鲁鲁爽爽爽在线视频观看 | 国产乱人伦偷精品视频 | 日韩无码专区 | 日韩在线不卡免费视频一区 | 美女黄网站人色视频免费国产 | 丰满少妇人妻久久久久久 | 131美女爱做视频 | 中文无码成人免费视频在线观看 | 亚洲国产一区二区三区在线观看 | 熟妇女人妻丰满少妇中文字幕 | 无码av最新清无码专区吞精 | 国产成人无码区免费内射一片色欲 | 亚洲精品一区二区三区在线 | 久久综合九色综合97网 | 永久免费观看国产裸体美女 | 免费无码午夜福利片69 | 无套内射视频囯产 | aⅴ在线视频男人的天堂 | 黑人大群体交免费视频 | 日产精品高潮呻吟av久久 | 精品国产一区二区三区四区 | 亚洲无人区午夜福利码高清完整版 | а√资源新版在线天堂 | 人妻夜夜爽天天爽三区 | 在线看片无码永久免费视频 | 亚洲国产欧美国产综合一区 | 我要看www免费看插插视频 | 欧美精品一区二区精品久久 | 久久人人97超碰a片精品 | 成人亚洲精品久久久久软件 | 人人妻人人澡人人爽欧美一区九九 | 国产福利视频一区二区 | 麻豆国产人妻欲求不满谁演的 | 欧美xxxxx精品 | 国产精品久久久久久亚洲影视内衣 | 欧美黑人巨大xxxxx | 午夜肉伦伦影院 | 天干天干啦夜天干天2017 | 少妇高潮喷潮久久久影院 | 给我免费的视频在线观看 | 中文亚洲成a人片在线观看 | 青草视频在线播放 | 免费中文字幕日韩欧美 | 久久久www成人免费毛片 | 日韩av无码一区二区三区不卡 | 日韩人妻无码一区二区三区久久99 | 大色综合色综合网站 | 中文字幕 人妻熟女 | 欧美国产日韩久久mv | 亚洲另类伦春色综合小说 | 中文字幕无码乱人伦 | 国产色视频一区二区三区 | 大地资源网第二页免费观看 | 1000部啪啪未满十八勿入下载 | 亚洲自偷精品视频自拍 | 国产成人一区二区三区别 | 日日摸日日碰夜夜爽av | 少妇无码吹潮 | 欧美freesex黑人又粗又大 | 乱码av麻豆丝袜熟女系列 | 亚洲中文字幕无码中文字在线 | 四十如虎的丰满熟妇啪啪 | 国产精品久久久久9999小说 | 窝窝午夜理论片影院 | 狠狠色噜噜狠狠狠狠7777米奇 | 欧美色就是色 | 九九在线中文字幕无码 | 国产欧美熟妇另类久久久 | 天堂亚洲2017在线观看 | 欧美日本免费一区二区三区 | 4hu四虎永久在线观看 | 老太婆性杂交欧美肥老太 | 婷婷丁香五月天综合东京热 | 少妇无码吹潮 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 国产人妻人伦精品 | 熟女少妇在线视频播放 | 精品 日韩 国产 欧美 视频 | 国产精品人人妻人人爽 | 亚洲a无码综合a国产av中文 | 在线成人www免费观看视频 | 最近免费中文字幕中文高清百度 | 亚洲 另类 在线 欧美 制服 | 国产麻豆精品精东影业av网站 | 亚洲 高清 成人 动漫 | 少妇性俱乐部纵欲狂欢电影 | 鲁大师影院在线观看 | 特大黑人娇小亚洲女 | 无码人妻少妇伦在线电影 | 欧美人与物videos另类 | 丁香啪啪综合成人亚洲 | 伊人久久大香线蕉亚洲 | 1000部啪啪未满十八勿入下载 | 国产精品va在线播放 | 欧美人与禽zoz0性伦交 | 午夜精品久久久久久久久 | 国产又爽又猛又粗的视频a片 | 国产精品无码一区二区三区不卡 | 精品欧洲av无码一区二区三区 | 一本色道久久综合狠狠躁 | 日日天日日夜日日摸 | 国产精品沙发午睡系列 | 狂野欧美性猛xxxx乱大交 | 又紧又大又爽精品一区二区 | 国产激情艳情在线看视频 | 欧美成人午夜精品久久久 | 色综合久久久无码网中文 | 国精品人妻无码一区二区三区蜜柚 | 国内精品久久毛片一区二区 | 久激情内射婷内射蜜桃人妖 | 99久久99久久免费精品蜜桃 | 亚洲一区av无码专区在线观看 | 午夜免费福利小电影 | 67194成是人免费无码 | 亚洲高清偷拍一区二区三区 | 一区二区传媒有限公司 | 午夜丰满少妇性开放视频 | 亚洲日本va午夜在线电影 | 日产精品99久久久久久 | 国产精品久久久久久亚洲毛片 | 国产精品igao视频网 | 欧美日本精品一区二区三区 | 日日鲁鲁鲁夜夜爽爽狠狠 | 国产人妻精品一区二区三区 | 亚洲国产成人a精品不卡在线 | 丰满少妇熟乱xxxxx视频 | 97人妻精品一区二区三区 | 老司机亚洲精品影院 | 成人性做爰aaa片免费看不忠 | 亚洲精品午夜国产va久久成人 | 无套内谢的新婚少妇国语播放 | 国产精品无码一区二区三区不卡 | 澳门永久av免费网站 | 精品人妻人人做人人爽 | 永久免费观看国产裸体美女 | 日韩精品a片一区二区三区妖精 | 亚洲精品国偷拍自产在线麻豆 | 精品aⅴ一区二区三区 | 色婷婷欧美在线播放内射 | 51国偷自产一区二区三区 | 一本久久a久久精品vr综合 | 亚洲国产精品成人久久蜜臀 | 色情久久久av熟女人妻网站 | 欧美freesex黑人又粗又大 | 在线а√天堂中文官网 | 麻豆果冻传媒2021精品传媒一区下载 | 97精品国产97久久久久久免费 | 丰满少妇熟乱xxxxx视频 | 97精品国产97久久久久久免费 | 国产精华av午夜在线观看 | 国产精品久久国产精品99 | 久久久精品成人免费观看 | 国产精品无码一区二区桃花视频 | 国产免费久久久久久无码 | 欧美精品在线观看 | 欧洲熟妇精品视频 | 人人妻人人澡人人爽欧美精品 | 永久免费观看美女裸体的网站 | 亚洲娇小与黑人巨大交 | 红桃av一区二区三区在线无码av | 久久综合给久久狠狠97色 | 国产成人亚洲综合无码 | 国产精品沙发午睡系列 | 四十如虎的丰满熟妇啪啪 | 色婷婷欧美在线播放内射 | 一二三四在线观看免费视频 | 伊人久久大香线蕉av一区二区 | 人人爽人人爽人人片av亚洲 | 国产两女互慰高潮视频在线观看 | 欧美猛少妇色xxxxx | 日本xxxx色视频在线观看免费 | 无码精品人妻一区二区三区av | 亚洲啪av永久无码精品放毛片 | 内射欧美老妇wbb | 国产真人无遮挡作爱免费视频 | 欧美成人高清在线播放 | 丰满人妻翻云覆雨呻吟视频 | 成人无码视频免费播放 | 国产熟妇高潮叫床视频播放 | 国产av剧情md精品麻豆 | 亚洲爆乳精品无码一区二区三区 | 九九久久精品国产免费看小说 | 国产亚洲精品久久久久久大师 | 人妻与老人中文字幕 | 偷窥日本少妇撒尿chinese | 精品国产乱码久久久久乱码 | 牲欲强的熟妇农村老妇女 | 国产口爆吞精在线视频 | 国产精品办公室沙发 | 欧美日韩在线亚洲综合国产人 | 欧美激情综合亚洲一二区 | 四虎影视成人永久免费观看视频 | 国产免费久久久久久无码 | а天堂中文在线官网 | 精品无码成人片一区二区98 | 亚洲国产一区二区三区在线观看 | 国产亲子乱弄免费视频 | 亚洲成色在线综合网站 | 欧美日韩一区二区三区自拍 | 男女作爱免费网站 | 精品日本一区二区三区在线观看 | 亚洲色大成网站www国产 | 国产精品va在线观看无码 | 久久久成人毛片无码 | 蜜桃视频插满18在线观看 | 日本在线高清不卡免费播放 | 乌克兰少妇性做爰 | 久久综合香蕉国产蜜臀av | 国产精品视频免费播放 | 国产乱人伦av在线无码 | 国产精品美女久久久久av爽李琼 | 99国产精品白浆在线观看免费 | 1000部啪啪未满十八勿入下载 | 中文字幕av无码一区二区三区电影 | 色综合久久中文娱乐网 | 国产亚洲人成在线播放 | 久久精品视频在线看15 | 久久综合九色综合欧美狠狠 | 国产精品理论片在线观看 | 狠狠cao日日穞夜夜穞av | 88国产精品欧美一区二区三区 | 日本乱人伦片中文三区 | 国产色精品久久人妻 | 亚洲乱码国产乱码精品精 | av人摸人人人澡人人超碰下载 | 国产两女互慰高潮视频在线观看 | 久久午夜夜伦鲁鲁片无码免费 | 日日躁夜夜躁狠狠躁 | 两性色午夜视频免费播放 | 2019nv天堂香蕉在线观看 | 乱人伦中文视频在线观看 | 一本久久a久久精品亚洲 | 中文字幕无码av激情不卡 | 国产莉萝无码av在线播放 | 日本乱人伦片中文三区 | 图片区 小说区 区 亚洲五月 | 国产性生大片免费观看性 | 麻花豆传媒剧国产免费mv在线 | 成人欧美一区二区三区 | 国产卡一卡二卡三 | 久久aⅴ免费观看 | 青春草在线视频免费观看 | 国产成人无码区免费内射一片色欲 | 国产美女精品一区二区三区 | 又色又爽又黄的美女裸体网站 | 东北女人啪啪对白 | 色爱情人网站 | 国产成人亚洲综合无码 | 国内精品久久毛片一区二区 | 亚洲国产精品无码一区二区三区 | 麻花豆传媒剧国产免费mv在线 | 伊在人天堂亚洲香蕉精品区 | 成人影院yy111111在线观看 | 日欧一片内射va在线影院 | 亚洲国产精华液网站w | 亚洲精品成人av在线 | 精品国产青草久久久久福利 | 婷婷丁香五月天综合东京热 | 欧美喷潮久久久xxxxx | 久久无码专区国产精品s | 日本成熟视频免费视频 | 亚洲精品久久久久中文第一幕 | 天天摸天天透天天添 | 十八禁视频网站在线观看 | 国产成人精品久久亚洲高清不卡 | 99国产精品白浆在线观看免费 | 免费观看的无遮挡av | 精品国产乱码久久久久乱码 | 国产69精品久久久久app下载 | 国产无av码在线观看 | 亚洲色成人中文字幕网站 | 国产内射爽爽大片视频社区在线 | 亚洲精品久久久久久一区二区 | 精品国产aⅴ无码一区二区 | 精品国产麻豆免费人成网站 | 又色又爽又黄的美女裸体网站 | 国产精品久久久久久无码 | 国产精品嫩草久久久久 | 国产麻豆精品一区二区三区v视界 | 无码av免费一区二区三区试看 | 免费无码肉片在线观看 | 亚洲成a人片在线观看日本 | 欧美zoozzooz性欧美 | 男女爱爱好爽视频免费看 | 亚洲国产欧美在线成人 | 日产精品99久久久久久 | a片在线免费观看 | 精品国偷自产在线视频 | 免费视频欧美无人区码 | 国产黄在线观看免费观看不卡 | 欧美国产日韩亚洲中文 | 亚洲欧洲无卡二区视頻 | 少妇的肉体aa片免费 | 中文字幕久久久久人妻 | 成在人线av无码免观看麻豆 | 国产激情一区二区三区 | 强伦人妻一区二区三区视频18 | 久久久久久av无码免费看大片 | 久久熟妇人妻午夜寂寞影院 | 色一情一乱一伦一视频免费看 | 欧美猛少妇色xxxxx | 亚洲色大成网站www国产 | 日日噜噜噜噜夜夜爽亚洲精品 | 亚洲日本va中文字幕 | 无码免费一区二区三区 | 欧美人与禽猛交狂配 | 亚洲人成人无码网www国产 | 亚洲第一网站男人都懂 | 国产av剧情md精品麻豆 | 亚洲日韩av一区二区三区中文 | 精品国偷自产在线 | 精品欧洲av无码一区二区三区 | 丁香花在线影院观看在线播放 | 妺妺窝人体色www在线小说 | 少妇无码一区二区二三区 | 永久免费观看国产裸体美女 | 日韩少妇内射免费播放 | 无码成人精品区在线观看 | 最新国产乱人伦偷精品免费网站 | 成人无码视频在线观看网站 | 欧美日韩精品 | 综合网日日天干夜夜久久 | 国产成人无码a区在线观看视频app | 无码纯肉视频在线观看 | 国产精品内射视频免费 | 给我免费的视频在线观看 | 亚洲欧美中文字幕5发布 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 无套内谢的新婚少妇国语播放 | 亚洲综合色区中文字幕 | 少妇人妻偷人精品无码视频 | 久久久精品456亚洲影院 | 亚洲色偷偷男人的天堂 | 老司机亚洲精品影院 | 在线 国产 欧美 亚洲 天堂 | 精品久久久久香蕉网 | 久久zyz资源站无码中文动漫 | 亚洲国产欧美日韩精品一区二区三区 | 国产一区二区三区日韩精品 | 成人片黄网站色大片免费观看 | 丝袜足控一区二区三区 | 内射欧美老妇wbb | 亚洲一区av无码专区在线观看 | 色窝窝无码一区二区三区色欲 | 日本一区二区三区免费播放 | 免费网站看v片在线18禁无码 | 亚洲精品午夜国产va久久成人 | 鲁鲁鲁爽爽爽在线视频观看 | 精品国产av色一区二区深夜久久 | 精品国产国产综合精品 | 国产亲子乱弄免费视频 | 少妇的肉体aa片免费 | 玩弄少妇高潮ⅹxxxyw | 国产性生大片免费观看性 | 国产精品久久久一区二区三区 | 国内老熟妇对白xxxxhd | 国产亚洲精品久久久久久久久动漫 | 女人被男人爽到呻吟的视频 | 人妻少妇精品久久 | 任你躁在线精品免费 | 国产精品久久久久久无码 | 亚洲国产精品一区二区美利坚 | 久激情内射婷内射蜜桃人妖 | 国产在热线精品视频 | 欧美日韩人成综合在线播放 | 在线 国产 欧美 亚洲 天堂 | 国产情侣作爱视频免费观看 | 无码吃奶揉捏奶头高潮视频 | 伊人久久婷婷五月综合97色 | 999久久久国产精品消防器材 | 欧美精品无码一区二区三区 | 少妇性l交大片欧洲热妇乱xxx | 嫩b人妻精品一区二区三区 | 亚洲乱码国产乱码精品精 | 野狼第一精品社区 | 久久五月精品中文字幕 | aⅴ亚洲 日韩 色 图网站 播放 | 夜精品a片一区二区三区无码白浆 | 日本乱人伦片中文三区 | 色一情一乱一伦一区二区三欧美 | 成人性做爰aaa片免费看 | 久久精品视频在线看15 | 欧美兽交xxxx×视频 | 粉嫩少妇内射浓精videos | 乌克兰少妇xxxx做受 | 又大又硬又黄的免费视频 | 欧美日韩人成综合在线播放 | 亚洲自偷自偷在线制服 | 天堂亚洲免费视频 | 乱人伦人妻中文字幕无码 | 亚洲熟妇色xxxxx欧美老妇 | 熟妇激情内射com | 999久久久国产精品消防器材 | 久久午夜无码鲁丝片午夜精品 | 76少妇精品导航 | 亚洲精品一区二区三区在线 | 麻豆成人精品国产免费 | 人妻互换免费中文字幕 | 久久久中文字幕日本无吗 | 狂野欧美性猛交免费视频 | 大肉大捧一进一出好爽视频 | 久久天天躁狠狠躁夜夜免费观看 | 亚洲精品午夜国产va久久成人 | 综合激情五月综合激情五月激情1 | 久久综合给合久久狠狠狠97色 | 精品国偷自产在线 | 噜噜噜亚洲色成人网站 | 亚洲自偷自偷在线制服 | 亚洲色无码一区二区三区 | 成人无码视频免费播放 | 欧美阿v高清资源不卡在线播放 | 18黄暴禁片在线观看 | 国产又爽又黄又刺激的视频 | 国模大胆一区二区三区 | 午夜成人1000部免费视频 | 人人妻人人藻人人爽欧美一区 | 色综合久久中文娱乐网 | 色一情一乱一伦一区二区三欧美 | 婷婷综合久久中文字幕蜜桃三电影 | 欧美黑人性暴力猛交喷水 | 久久亚洲中文字幕精品一区 | 久久精品国产一区二区三区 | 亚洲呦女专区 | 欧美亚洲国产一区二区三区 | 国产乡下妇女做爰 | 欧美人与牲动交xxxx | 欧美丰满少妇xxxx性 | 小泽玛莉亚一区二区视频在线 | 天天综合网天天综合色 | 日日碰狠狠躁久久躁蜜桃 | 内射后入在线观看一区 | 色婷婷综合中文久久一本 | 日韩精品无码一区二区中文字幕 | 日韩无套无码精品 | 国产艳妇av在线观看果冻传媒 | 在线亚洲高清揄拍自拍一品区 | 亚洲欧美中文字幕5发布 | 天下第一社区视频www日本 | 俺去俺来也www色官网 | 一本大道伊人av久久综合 | 精品偷自拍另类在线观看 | 丰满护士巨好爽好大乳 | 久久久久久国产精品无码下载 | 亚洲人交乣女bbw | 国产亚洲精品久久久久久大师 | 亚洲成a人片在线观看无码 | 荫蒂被男人添的好舒服爽免费视频 | 色婷婷香蕉在线一区二区 | 亚洲 a v无 码免 费 成 人 a v | 日本精品少妇一区二区三区 | 久久精品国产日本波多野结衣 | 日韩欧美中文字幕在线三区 | 国产在线无码精品电影网 | 国产69精品久久久久app下载 | 久久天天躁狠狠躁夜夜免费观看 | 成人欧美一区二区三区 | 国产99久久精品一区二区 | 日本免费一区二区三区最新 | 国产做国产爱免费视频 | 国产成人综合在线女婷五月99播放 | 欧美人与善在线com | 亚洲の无码国产の无码步美 | 亚洲精品一区三区三区在线观看 | 特黄特色大片免费播放器图片 | 中文字幕无码人妻少妇免费 | 天干天干啦夜天干天2017 | 久久 国产 尿 小便 嘘嘘 | 亚洲爆乳精品无码一区二区三区 | 天天拍夜夜添久久精品 | 国产精品久久久久久久影院 | 在线观看欧美一区二区三区 | 国产三级精品三级男人的天堂 | 青青青爽视频在线观看 | 日本高清一区免费中文视频 | 亚洲码国产精品高潮在线 | 国产精品国产三级国产专播 | 国产两女互慰高潮视频在线观看 | 夜夜影院未满十八勿进 | 日韩少妇白浆无码系列 | 对白脏话肉麻粗话av | 亚洲成a人一区二区三区 | 国产精品久久久久无码av色戒 | 一本久久a久久精品vr综合 | 无码一区二区三区在线观看 | 国产在热线精品视频 | 日本一卡2卡3卡四卡精品网站 | 亚洲精品午夜无码电影网 | √天堂资源地址中文在线 | 乌克兰少妇xxxx做受 | 无码人妻丰满熟妇区毛片18 | 婷婷五月综合缴情在线视频 | 国产人成高清在线视频99最全资源 | 鲁鲁鲁爽爽爽在线视频观看 | 国产精品第一区揄拍无码 | 久久综合九色综合欧美狠狠 | 亚洲精品午夜无码电影网 | 久9re热视频这里只有精品 | 蜜桃av抽搐高潮一区二区 | 亚洲成av人在线观看网址 | 亚洲精品久久久久久久久久久 | 日日夜夜撸啊撸 | 日韩人妻系列无码专区 | 国产黄在线观看免费观看不卡 | 国产精品久久久一区二区三区 | 97人妻精品一区二区三区 | 日韩 欧美 动漫 国产 制服 | 日本大香伊一区二区三区 | 中文字幕人妻丝袜二区 | 国产成人午夜福利在线播放 | 国产综合在线观看 | 一本一道久久综合久久 | 少妇高潮喷潮久久久影院 | 精品人妻中文字幕有码在线 | 久久精品99久久香蕉国产色戒 | 精品熟女少妇av免费观看 | 天天躁日日躁狠狠躁免费麻豆 | 亚洲综合在线一区二区三区 | 日本熟妇浓毛 | 精品一区二区三区无码免费视频 | 久久亚洲国产成人精品性色 | 久久亚洲精品中文字幕无男同 | 久久久国产精品无码免费专区 | 亚洲国产精品毛片av不卡在线 | 一本久道久久综合狠狠爱 | 欧美丰满老熟妇xxxxx性 | 亚洲精品国产精品乱码视色 | 国产香蕉97碰碰久久人人 | 狠狠色噜噜狠狠狠7777奇米 | 国产无套内射久久久国产 | 国产综合在线观看 | 波多野结衣 黑人 | 欧美亚洲国产一区二区三区 | 中文字幕人妻无码一区二区三区 | 精品国偷自产在线视频 | 免费中文字幕日韩欧美 | 日韩精品一区二区av在线 | 亚洲色偷偷男人的天堂 | 亚洲国产精华液网站w | 国产人妻精品一区二区三区不卡 | 最近的中文字幕在线看视频 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 亚拍精品一区二区三区探花 | 亚洲va中文字幕无码久久不卡 | 久久久av男人的天堂 | 国精产品一区二区三区 | 国产97在线 | 亚洲 | 一区二区三区乱码在线 | 欧洲 | 亚洲 日韩 欧美 成人 在线观看 | 国产色视频一区二区三区 | 亚洲成av人在线观看网址 | 久久久无码中文字幕久... | 成年女人永久免费看片 | 亚洲中文字幕av在天堂 | 日日天干夜夜狠狠爱 | 日韩无套无码精品 | 中文字幕乱码亚洲无线三区 | 亚洲自偷自拍另类第1页 | 无码av最新清无码专区吞精 | 夜夜躁日日躁狠狠久久av | v一区无码内射国产 | 亚洲一区二区三区香蕉 | 成 人 网 站国产免费观看 | 性欧美大战久久久久久久 | 5858s亚洲色大成网站www | 男人的天堂2018无码 | 国产成人综合美国十次 | 夜夜影院未满十八勿进 | 成 人 免费观看网站 | 97夜夜澡人人双人人人喊 | 大胆欧美熟妇xx | 精品久久久久久人妻无码中文字幕 | 国产激情无码一区二区app | 婷婷五月综合缴情在线视频 | 在线观看国产午夜福利片 | 人妻互换免费中文字幕 | 激情国产av做激情国产爱 | 水蜜桃色314在线观看 | 乱码午夜-极国产极内射 | 少妇性俱乐部纵欲狂欢电影 | 日本护士毛茸茸高潮 | 亚洲va欧美va天堂v国产综合 | 国产明星裸体无码xxxx视频 | 日日橹狠狠爱欧美视频 | 亚洲男人av天堂午夜在 | 夫妻免费无码v看片 | 欧美精品无码一区二区三区 | 国产性生交xxxxx无码 | 国产乱码精品一品二品 | 久久亚洲精品中文字幕无男同 | 兔费看少妇性l交大片免费 | 红桃av一区二区三区在线无码av | 国产亚洲人成a在线v网站 | 人妻体内射精一区二区三四 | 色综合视频一区二区三区 | 成人亚洲精品久久久久 | а√天堂www在线天堂小说 | a在线观看免费网站大全 | 1000部啪啪未满十八勿入下载 | 亚洲欧洲日本无在线码 | 性啪啪chinese东北女人 | 国产成人综合美国十次 | 国产超级va在线观看视频 | 欧美三级不卡在线观看 | 东京热一精品无码av | 亚洲国产成人a精品不卡在线 | 亚洲精品中文字幕乱码 | 亚洲国产欧美国产综合一区 | 伊人久久大香线蕉午夜 | 天下第一社区视频www日本 | 无人区乱码一区二区三区 | 极品嫩模高潮叫床 | 国产欧美精品一区二区三区 | 欧美三级不卡在线观看 | 日本va欧美va欧美va精品 | 啦啦啦www在线观看免费视频 | 亚洲aⅴ无码成人网站国产app | 国产精品理论片在线观看 | 蜜桃无码一区二区三区 | 国产精品a成v人在线播放 | 国产亚洲欧美日韩亚洲中文色 | 无码任你躁久久久久久久 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 荡女精品导航 | 精品欧洲av无码一区二区三区 | 亚洲国产精品无码一区二区三区 | 久久国内精品自在自线 | 精品久久8x国产免费观看 | 亚洲爆乳大丰满无码专区 | 亚洲aⅴ无码成人网站国产app | 99久久久国产精品无码免费 | 久久99精品久久久久久动态图 | ass日本丰满熟妇pics | 国产猛烈高潮尖叫视频免费 | 亚洲欧洲无卡二区视頻 | 亚洲欧美精品伊人久久 | 欧美亚洲日韩国产人成在线播放 | 夜夜躁日日躁狠狠久久av | 国产精华av午夜在线观看 | 亚洲日本在线电影 | 131美女爱做视频 | 麻豆国产97在线 | 欧洲 | 欧美 日韩 人妻 高清 中文 | 欧美 丝袜 自拍 制服 另类 | 伊人久久大香线蕉亚洲 | 国产精品无码成人午夜电影 | 成年女人永久免费看片 | 蜜桃视频插满18在线观看 | 粉嫩少妇内射浓精videos | 亚洲爆乳大丰满无码专区 | 97se亚洲精品一区 | 色综合久久久无码网中文 | 欧美 丝袜 自拍 制服 另类 | 日韩视频 中文字幕 视频一区 | 日本乱人伦片中文三区 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 中文字幕久久久久人妻 | 中文精品无码中文字幕无码专区 | v一区无码内射国产 | 樱花草在线社区www | 久久久久久国产精品无码下载 | 国产情侣作爱视频免费观看 | 东北女人啪啪对白 | 中文精品久久久久人妻不卡 | 55夜色66夜色国产精品视频 | 荫蒂添的好舒服视频囗交 | 少妇性l交大片 | 亚洲理论电影在线观看 | 国产精品亚洲综合色区韩国 | 久久99精品国产麻豆蜜芽 | 精品水蜜桃久久久久久久 | 欧美刺激性大交 | 无码人妻久久一区二区三区不卡 | 少妇被黑人到高潮喷出白浆 | 蜜桃视频插满18在线观看 | 国产电影无码午夜在线播放 | 精品欧美一区二区三区久久久 | 亚洲成色www久久网站 | 国产熟妇高潮叫床视频播放 | 国产亚洲精品久久久ai换 | 欧美一区二区三区视频在线观看 | 无码一区二区三区在线 | 精品aⅴ一区二区三区 | 欧美人与牲动交xxxx | 欧美 日韩 亚洲 在线 | 精品一二三区久久aaa片 | 天堂在线观看www | 欧美人与物videos另类 | 国产精品.xx视频.xxtv | 欧美老妇与禽交 | 无码人妻av免费一区二区三区 | 亚洲欧美日韩综合久久久 | 国产色视频一区二区三区 | 午夜精品久久久内射近拍高清 | 丰满少妇人妻久久久久久 | 国产精品久久久久久久9999 | 精品久久久无码中文字幕 | 成人av无码一区二区三区 | 永久黄网站色视频免费直播 | 亚洲欧美精品aaaaaa片 | 色狠狠av一区二区三区 | 综合人妻久久一区二区精品 | 美女扒开屁股让男人桶 | 欧美人与禽猛交狂配 | 在线观看国产一区二区三区 | 成人aaa片一区国产精品 | 伊人久久大香线焦av综合影院 | 久久综合色之久久综合 | a国产一区二区免费入口 | 亚洲日韩av一区二区三区中文 | 久久综合九色综合欧美狠狠 | 青青久在线视频免费观看 | 国色天香社区在线视频 | 国产免费观看黄av片 | 亚洲欧洲中文日韩av乱码 | 国内老熟妇对白xxxxhd | 久久久中文久久久无码 | 免费看少妇作爱视频 | 伊人久久大香线蕉av一区二区 | 国产免费观看黄av片 | 中文久久乱码一区二区 | 国产精品国产三级国产专播 | 福利一区二区三区视频在线观看 | 色综合久久久无码中文字幕 | 免费播放一区二区三区 | 98国产精品综合一区二区三区 | 亚洲国产精品美女久久久久 | 男女爱爱好爽视频免费看 | 午夜精品久久久内射近拍高清 | 狂野欧美性猛xxxx乱大交 | 欧美高清在线精品一区 | 国产无套内射久久久国产 | 国产精品内射视频免费 | 人人妻人人藻人人爽欧美一区 | 人妻少妇精品久久 | 人妻夜夜爽天天爽三区 | 少妇邻居内射在线 | 久久精品人人做人人综合 | 无码人妻精品一区二区三区下载 | 99精品国产综合久久久久五月天 | 国产莉萝无码av在线播放 | 国产精品国产三级国产专播 | 无码精品人妻一区二区三区av | 一本加勒比波多野结衣 | 一本色道久久综合亚洲精品不卡 | 国产偷抇久久精品a片69 | 色噜噜亚洲男人的天堂 | 日本欧美一区二区三区乱码 | 荫蒂添的好舒服视频囗交 | 扒开双腿吃奶呻吟做受视频 | 一二三四社区在线中文视频 | 欧美35页视频在线观看 | 亚洲人成无码网www | 狠狠色噜噜狠狠狠7777奇米 | 黑人巨大精品欧美黑寡妇 | 亚洲无人区一区二区三区 | 日韩精品成人一区二区三区 | 伊人色综合久久天天小片 | 中文字幕日产无线码一区 | а√资源新版在线天堂 | 精品少妇爆乳无码av无码专区 | 麻豆人妻少妇精品无码专区 | 国产人妻人伦精品1国产丝袜 | 蜜桃臀无码内射一区二区三区 | 一本大道伊人av久久综合 | 中文字幕人妻无码一夲道 | 欧美人妻一区二区三区 | 最近的中文字幕在线看视频 | 18无码粉嫩小泬无套在线观看 | 最新国产乱人伦偷精品免费网站 | 精品厕所偷拍各类美女tp嘘嘘 | 中文字幕无码乱人伦 | 国产又爽又猛又粗的视频a片 | 国产人成高清在线视频99最全资源 | 久久久www成人免费毛片 | 丝袜足控一区二区三区 | 激情综合激情五月俺也去 | 国产三级久久久精品麻豆三级 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 又大又紧又粉嫩18p少妇 | 日日橹狠狠爱欧美视频 | 奇米综合四色77777久久 东京无码熟妇人妻av在线网址 | 亚洲另类伦春色综合小说 | 中文字幕人妻无码一区二区三区 | 一本久道久久综合狠狠爱 | 国产精品福利视频导航 | 最新国产麻豆aⅴ精品无码 | 性生交大片免费看女人按摩摩 | 67194成是人免费无码 | 久久zyz资源站无码中文动漫 | 国产精品亚洲综合色区韩国 | 四虎永久在线精品免费网址 | 欧美xxxx黑人又粗又长 | 精品一区二区三区波多野结衣 | 亚洲国产精品一区二区美利坚 | 免费观看激色视频网站 | 特黄特色大片免费播放器图片 | 青春草在线视频免费观看 | 嫩b人妻精品一区二区三区 | 97人妻精品一区二区三区 | 99久久精品午夜一区二区 | 国产激情精品一区二区三区 | 国产成人午夜福利在线播放 | 午夜福利试看120秒体验区 | 野狼第一精品社区 | 国产一区二区三区四区五区加勒比 | 久久综合九色综合97网 | 中国大陆精品视频xxxx | 亚洲自偷自拍另类第1页 | 国产人妻精品午夜福利免费 | 18无码粉嫩小泬无套在线观看 | 一个人看的www免费视频在线观看 | 丰满妇女强制高潮18xxxx | 在教室伦流澡到高潮hnp视频 | 老司机亚洲精品影院 | 国产激情艳情在线看视频 | 三上悠亚人妻中文字幕在线 | 蜜臀av无码人妻精品 | 亚洲七七久久桃花影院 | 少妇性l交大片欧洲热妇乱xxx | 日日摸天天摸爽爽狠狠97 | 国产精品久久久久久亚洲影视内衣 | 亚洲成av人片在线观看无码不卡 | 1000部夫妻午夜免费 | 麻豆国产丝袜白领秘书在线观看 | 狠狠躁日日躁夜夜躁2020 | 风流少妇按摩来高潮 | 无码一区二区三区在线观看 | 亚洲色成人中文字幕网站 | 麻豆国产丝袜白领秘书在线观看 | 欧美亚洲国产一区二区三区 | 国产精品亚洲lv粉色 | 福利一区二区三区视频在线观看 | 丰满人妻一区二区三区免费视频 | 国产亚洲精品久久久闺蜜 | 九九热爱视频精品 | √天堂中文官网8在线 | 草草网站影院白丝内射 | 人妻互换免费中文字幕 | 啦啦啦www在线观看免费视频 | 国产成人无码av片在线观看不卡 | 中文字幕av伊人av无码av | 欧美黑人性暴力猛交喷水 | 免费观看又污又黄的网站 | 熟妇女人妻丰满少妇中文字幕 | 青青青爽视频在线观看 | 久久99国产综合精品 | 18无码粉嫩小泬无套在线观看 | 99麻豆久久久国产精品免费 | 国产乱码精品一品二品 | a国产一区二区免费入口 | 99久久精品午夜一区二区 | 日韩av无码一区二区三区不卡 | 在线天堂新版最新版在线8 | 亚洲色大成网站www国产 | 国内丰满熟女出轨videos | 狠狠色色综合网站 | 亚洲日韩中文字幕在线播放 | 无码av中文字幕免费放 | 国产偷自视频区视频 | 午夜男女很黄的视频 | 久久久久久a亚洲欧洲av冫 | 久久99精品久久久久久动态图 | 中文字幕无码av波多野吉衣 | 亚洲国产精品久久久天堂 | 国产欧美熟妇另类久久久 | 丝袜 中出 制服 人妻 美腿 | 少妇无套内谢久久久久 | 亚洲国产精品一区二区第一页 | 国产午夜精品一区二区三区嫩草 | 国产av一区二区精品久久凹凸 | 欧美人与动性行为视频 | 人人澡人人妻人人爽人人蜜桃 | 18精品久久久无码午夜福利 | 中文字幕乱码人妻二区三区 | 影音先锋中文字幕无码 | 国产9 9在线 | 中文 | 午夜精品久久久久久久 | 日韩欧美中文字幕在线三区 | 乱中年女人伦av三区 | 天堂亚洲免费视频 | 色综合久久久无码中文字幕 | 性色欲情网站iwww九文堂 | 中文字幕av伊人av无码av | 国精产品一区二区三区 | 国产人妻人伦精品1国产丝袜 | 亚洲熟悉妇女xxx妇女av | 国产精品二区一区二区aⅴ污介绍 | 国内精品一区二区三区不卡 | 国产极品美女高潮无套在线观看 | 99久久久国产精品无码免费 | 亚洲人成网站在线播放942 | 亚洲日韩乱码中文无码蜜桃臀网站 | 亚洲综合另类小说色区 | 女人被男人躁得好爽免费视频 | 少妇一晚三次一区二区三区 | 中文字幕+乱码+中文字幕一区 | 99久久精品午夜一区二区 | 亚洲精品一区国产 | 国产精品无码一区二区三区不卡 | 国产激情一区二区三区 | 无码人妻丰满熟妇区五十路百度 | 日本肉体xxxx裸交 | 熟女俱乐部五十路六十路av | 国产人妻人伦精品 | 成人欧美一区二区三区黑人免费 | 欧美熟妇另类久久久久久不卡 | 精品无码成人片一区二区98 | 国产suv精品一区二区五 | 亚洲s码欧洲m码国产av | 美女黄网站人色视频免费国产 | 国产色在线 | 国产 | 漂亮人妻洗澡被公强 日日躁 | 亚洲中文字幕在线无码一区二区 | 国产乱人伦偷精品视频 | 人人妻人人澡人人爽欧美一区 | 沈阳熟女露脸对白视频 | 97精品国产97久久久久久免费 | 国产亲子乱弄免费视频 | 大肉大捧一进一出好爽视频 | 无码纯肉视频在线观看 | 久久综合给合久久狠狠狠97色 | 丰满护士巨好爽好大乳 | 一本久道高清无码视频 | 在线a亚洲视频播放在线观看 | 欧美性生交活xxxxxdddd | 国产suv精品一区二区五 | 三级4级全黄60分钟 | 狂野欧美性猛xxxx乱大交 | 天堂无码人妻精品一区二区三区 | 色爱情人网站 | 少女韩国电视剧在线观看完整 | 亚洲精品国产品国语在线观看 | 人妻少妇精品无码专区二区 | 亚洲国产高清在线观看视频 | 久久久精品国产sm最大网站 | 久久国内精品自在自线 | 亚洲中文字幕av在天堂 | 亚洲成a人片在线观看日本 | 亚洲国产精品久久人人爱 | 精品人妻人人做人人爽 | 最新国产乱人伦偷精品免费网站 | 久久无码中文字幕免费影院蜜桃 | 欧美日韩久久久精品a片 | 久久久www成人免费毛片 | 特黄特色大片免费播放器图片 | 午夜福利一区二区三区在线观看 | 精品国精品国产自在久国产87 | 亚洲国产成人av在线观看 | 日本又色又爽又黄的a片18禁 | 国产极品美女高潮无套在线观看 | 色窝窝无码一区二区三区色欲 | 亚洲男人av天堂午夜在 | 精品国产乱码久久久久乱码 | 少妇久久久久久人妻无码 | 久久久久亚洲精品中文字幕 | 亚洲色欲色欲欲www在线 | 国产乱人伦偷精品视频 | 中文字幕精品av一区二区五区 | 久久久久成人片免费观看蜜芽 | 久久综合给久久狠狠97色 | 日韩精品成人一区二区三区 | 成在人线av无码免费 | 亚洲精品久久久久中文第一幕 | 天天综合网天天综合色 | 国产情侣作爱视频免费观看 | 亚洲热妇无码av在线播放 | 成人女人看片免费视频放人 | 99久久精品国产一区二区蜜芽 | 国产人妻精品一区二区三区 | 1000部啪啪未满十八勿入下载 | 天堂亚洲免费视频 | 欧美 日韩 人妻 高清 中文 | 狠狠色丁香久久婷婷综合五月 | 在线播放亚洲第一字幕 | 亚洲欧美日韩国产精品一区二区 | 在线欧美精品一区二区三区 | а天堂中文在线官网 | 毛片内射-百度 | 午夜免费福利小电影 | 亚洲精品国产a久久久久久 | 久久久久亚洲精品男人的天堂 | 中文字幕无码免费久久99 | 国产在线精品一区二区高清不卡 | 中文精品久久久久人妻不卡 | 18禁黄网站男男禁片免费观看 | 国产精品久久福利网站 | 国内精品一区二区三区不卡 | 少妇激情av一区二区 | 一个人看的视频www在线 | 国产明星裸体无码xxxx视频 | 任你躁国产自任一区二区三区 | 高清无码午夜福利视频 | 欧美午夜特黄aaaaaa片 | 日日摸天天摸爽爽狠狠97 | 国精产品一区二区三区 | 好屌草这里只有精品 | 国产色视频一区二区三区 | 国产在线aaa片一区二区99 | 国产精品.xx视频.xxtv | 毛片内射-百度 | 日本高清一区免费中文视频 | 国产成人无码av一区二区 | 特黄特色大片免费播放器图片 | 国产乱人伦app精品久久 国产在线无码精品电影网 国产国产精品人在线视 | 国产亚洲精品久久久久久国模美 | 日本大乳高潮视频在线观看 | 人人妻人人藻人人爽欧美一区 | 永久黄网站色视频免费直播 | 亚洲成av人片在线观看无码不卡 | 伊人久久大香线焦av综合影院 | 丝袜足控一区二区三区 | 欧美亚洲日韩国产人成在线播放 | 久久亚洲日韩精品一区二区三区 | 日本大香伊一区二区三区 | 成人免费视频一区二区 | 999久久久国产精品消防器材 | 精品无码国产一区二区三区av | 人人妻在人人 | 300部国产真实乱 | 亚洲爆乳大丰满无码专区 | 97精品人妻一区二区三区香蕉 | 国产激情艳情在线看视频 | 久久综合给久久狠狠97色 | 精品无码av一区二区三区 | 青青青手机频在线观看 | 国产 浪潮av性色四虎 | 蜜臀aⅴ国产精品久久久国产老师 | 天天摸天天透天天添 | 国产 浪潮av性色四虎 | 欧美怡红院免费全部视频 | 中文字幕无码人妻少妇免费 | 久久久久亚洲精品男人的天堂 | 一本大道久久东京热无码av | 亚洲va欧美va天堂v国产综合 | 免费人成在线观看网站 | 无码一区二区三区在线观看 | 啦啦啦www在线观看免费视频 | 久久亚洲中文字幕无码 | 久久久国产精品无码免费专区 | 国产成人午夜福利在线播放 | 午夜不卡av免费 一本久久a久久精品vr综合 | 激情亚洲一区国产精品 | 亚欧洲精品在线视频免费观看 | 精品厕所偷拍各类美女tp嘘嘘 | 黑人巨大精品欧美黑寡妇 | 免费视频欧美无人区码 | 中文字幕av无码一区二区三区电影 | 亚洲自偷自偷在线制服 | 日韩av无码一区二区三区不卡 | 亚洲欧美精品aaaaaa片 | 无码精品国产va在线观看dvd | 精品日本一区二区三区在线观看 | 思思久久99热只有频精品66 | 日韩亚洲欧美精品综合 | 亚洲成av人片在线观看无码不卡 | 亚洲伊人久久精品影院 | 国产免费久久精品国产传媒 | 久久国产精品二国产精品 | 久久www免费人成人片 | 青春草在线视频免费观看 | 欧美性黑人极品hd | 乱人伦人妻中文字幕无码久久网 | 成人综合网亚洲伊人 | 亚洲精品鲁一鲁一区二区三区 | 久久天天躁狠狠躁夜夜免费观看 | 久久久婷婷五月亚洲97号色 | 人人爽人人澡人人人妻 | 日本www一道久久久免费榴莲 | 久久久成人毛片无码 | 97久久超碰中文字幕 | 国产尤物精品视频 | 免费观看激色视频网站 | 日本精品少妇一区二区三区 | 亚洲成av人在线观看网址 | 无遮挡啪啪摇乳动态图 | 蜜桃无码一区二区三区 | 天天av天天av天天透 | 天天综合网天天综合色 | 高潮毛片无遮挡高清免费视频 | 无码国内精品人妻少妇 | a在线亚洲男人的天堂 | 又紧又大又爽精品一区二区 | 色婷婷欧美在线播放内射 | 色婷婷久久一区二区三区麻豆 | 久久午夜无码鲁丝片 | 国产成人av免费观看 | 国产成人亚洲综合无码 | 国产熟妇另类久久久久 | 免费无码av一区二区 | 久久久国产精品无码免费专区 | 日韩av无码一区二区三区不卡 | 狂野欧美激情性xxxx | 伊在人天堂亚洲香蕉精品区 | 国产艳妇av在线观看果冻传媒 | 99精品久久毛片a片 | 丁香花在线影院观看在线播放 | 国产真实伦对白全集 | 国产精品va在线播放 | 精品国产青草久久久久福利 | 国产绳艺sm调教室论坛 | 欧美性猛交内射兽交老熟妇 | 性生交大片免费看l | 国产av无码专区亚洲a∨毛片 | 人人妻人人澡人人爽欧美一区 | 欧美三级不卡在线观看 | 日本又色又爽又黄的a片18禁 | 日韩精品无码一区二区中文字幕 | 久久99精品久久久久久 | 久激情内射婷内射蜜桃人妖 | 午夜福利试看120秒体验区 | 日韩亚洲欧美中文高清在线 | 日韩人妻无码中文字幕视频 | 亚洲伊人久久精品影院 | 亚洲精品国产第一综合99久久 | 国产莉萝无码av在线播放 | 国产精品成人av在线观看 | 日韩精品无码免费一区二区三区 | 99久久久无码国产精品免费 | 日本丰满护士爆乳xxxx | 国产区女主播在线观看 | 水蜜桃亚洲一二三四在线 | 激情综合激情五月俺也去 | 午夜肉伦伦影院 | 国产精品亚洲а∨无码播放麻豆 | 亚洲精品鲁一鲁一区二区三区 | 妺妺窝人体色www在线小说 | 中文字幕乱码人妻二区三区 | 久久久久99精品成人片 | 欧美精品免费观看二区 | 国产成人综合在线女婷五月99播放 | 久久精品成人欧美大片 | 精品无人国产偷自产在线 | 亚洲乱亚洲乱妇50p | 国产真实夫妇视频 | √8天堂资源地址中文在线 | 欧美人与禽zoz0性伦交 | 国产口爆吞精在线视频 | 色一情一乱一伦一区二区三欧美 | 日韩欧美中文字幕在线三区 | 精品一二三区久久aaa片 | 午夜性刺激在线视频免费 | 午夜熟女插插xx免费视频 | 99麻豆久久久国产精品免费 | 成熟妇人a片免费看网站 | 精品国产一区二区三区四区 | 免费观看的无遮挡av | 性色欲情网站iwww九文堂 | 精品无码av一区二区三区 | 欧美日韩视频无码一区二区三 | 国产极品美女高潮无套在线观看 | 又色又爽又黄的美女裸体网站 | 黑人大群体交免费视频 | 99er热精品视频 | 99久久精品国产一区二区蜜芽 | 无码国内精品人妻少妇 | 中国大陆精品视频xxxx | 亚洲午夜久久久影院 | 成熟妇人a片免费看网站 | 人人爽人人爽人人片av亚洲 | 亚洲色偷偷偷综合网 | 无码人妻出轨黑人中文字幕 | 国产成人无码午夜视频在线观看 | 国产成人精品视频ⅴa片软件竹菊 | 色欲久久久天天天综合网精品 | 欧美性猛交xxxx富婆 | 色婷婷欧美在线播放内射 | 国产熟妇高潮叫床视频播放 | 正在播放老肥熟妇露脸 | 国产精品久久久午夜夜伦鲁鲁 | 欧美国产亚洲日韩在线二区 | 东京热无码av男人的天堂 | 国产无套内射久久久国产 | 亚洲日韩av一区二区三区四区 | 欧洲精品码一区二区三区免费看 | 久久99国产综合精品 | 波多野结衣一区二区三区av免费 | 伊在人天堂亚洲香蕉精品区 | 久久久国产一区二区三区 | 国产人妻久久精品二区三区老狼 | 日韩人妻系列无码专区 | 国产亚洲精品精品国产亚洲综合 | 大肉大捧一进一出视频出来呀 | 色爱情人网站 | 黄网在线观看免费网站 | 中文字幕乱码人妻二区三区 | 国产精品亚洲专区无码不卡 | 狠狠色丁香久久婷婷综合五月 | 国内精品久久毛片一区二区 | 无码国产色欲xxxxx视频 | 免费国产黄网站在线观看 | a在线亚洲男人的天堂 | 国产莉萝无码av在线播放 | 少妇人妻偷人精品无码视频 | 亚洲熟妇色xxxxx欧美老妇 | 精品一区二区不卡无码av | 天堂亚洲2017在线观看 | 日韩精品久久久肉伦网站 | 超碰97人人做人人爱少妇 | 国产sm调教视频在线观看 | 精品国产成人一区二区三区 | 日产国产精品亚洲系列 | 18禁黄网站男男禁片免费观看 | 亚洲 另类 在线 欧美 制服 | 蜜臀av在线观看 在线欧美精品一区二区三区 | 98国产精品综合一区二区三区 | 99久久精品国产一区二区蜜芽 | 无码纯肉视频在线观看 | 精品无码av一区二区三区 | 精品国产av色一区二区深夜久久 | 国内综合精品午夜久久资源 | 精品人妻人人做人人爽夜夜爽 | 野狼第一精品社区 | 思思久久99热只有频精品66 | 性生交片免费无码看人 | 亚洲精品午夜无码电影网 | 久久久婷婷五月亚洲97号色 | 无遮无挡爽爽免费视频 | 午夜男女很黄的视频 | 亚洲精品国偷拍自产在线麻豆 | 国产精品沙发午睡系列 | 欧美人与禽猛交狂配 | 亚洲区小说区激情区图片区 | 巨爆乳无码视频在线观看 | 国产精品无码一区二区三区不卡 | 高中生自慰www网站 | 国产成人无码午夜视频在线观看 | www成人国产高清内射 | 国产无套内射久久久国产 | 日韩精品无码一区二区中文字幕 | 麻豆成人精品国产免费 | 国产真人无遮挡作爱免费视频 | 国模大胆一区二区三区 | 久久精品人人做人人综合试看 | 久久久久成人片免费观看蜜芽 | 久久久国产精品无码免费专区 | 国产激情无码一区二区 | 久久精品女人的天堂av | 精品无码成人片一区二区98 | 99久久人妻精品免费一区 | 无码精品人妻一区二区三区av | 俄罗斯老熟妇色xxxx | 亚洲人亚洲人成电影网站色 | 久久精品人妻少妇一区二区三区 | 影音先锋中文字幕无码 | 国产97色在线 | 免 | 国产精品内射视频免费 | 亚洲国产精品美女久久久久 | 国产福利视频一区二区 | 乌克兰少妇性做爰 | 无码人中文字幕 | 女人被爽到呻吟gif动态图视看 | 99riav国产精品视频 | 免费中文字幕日韩欧美 | 天天拍夜夜添久久精品大 | 色欲久久久天天天综合网精品 | 噜噜噜亚洲色成人网站 | 欧洲精品码一区二区三区免费看 | 欧美 日韩 人妻 高清 中文 | 夜精品a片一区二区三区无码白浆 | 国产精品久久久久影院嫩草 | 88国产精品欧美一区二区三区 | 99久久人妻精品免费一区 | 亚洲国精产品一二二线 | 亚洲色大成网站www | 啦啦啦www在线观看免费视频 | 国产熟妇另类久久久久 | 97久久国产亚洲精品超碰热 | 国产69精品久久久久app下载 | 亚洲色欲色欲欲www在线 | 白嫩日本少妇做爰 | 日韩精品无码一区二区中文字幕 | 久久99久久99精品中文字幕 | 蜜桃臀无码内射一区二区三区 | 免费无码的av片在线观看 | 欧美熟妇另类久久久久久不卡 | 麻花豆传媒剧国产免费mv在线 | 久久婷婷五月综合色国产香蕉 | 又紧又大又爽精品一区二区 | 国内精品九九久久久精品 | 久久无码中文字幕免费影院蜜桃 | 99久久精品午夜一区二区 | 亚洲狠狠婷婷综合久久 | 久久无码专区国产精品s | 十八禁真人啪啪免费网站 | 亚洲国产精品久久人人爱 | 亚洲中文字幕久久无码 | 精品一区二区不卡无码av | 扒开双腿疯狂进出爽爽爽视频 | 天天摸天天碰天天添 | 欧美日本免费一区二区三区 | 精品少妇爆乳无码av无码专区 | 少妇一晚三次一区二区三区 | 亚洲娇小与黑人巨大交 | 中文字幕乱码中文乱码51精品 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 免费视频欧美无人区码 | 1000部夫妻午夜免费 | 在线成人www免费观看视频 | 国产舌乚八伦偷品w中 | 亚洲高清偷拍一区二区三区 | 高潮毛片无遮挡高清免费 | 牲欲强的熟妇农村老妇女视频 | 欧洲美熟女乱又伦 | 无码人妻出轨黑人中文字幕 | 亚洲狠狠婷婷综合久久 | 丰满妇女强制高潮18xxxx | 欧美国产日韩亚洲中文 | 无码av岛国片在线播放 | 激情亚洲一区国产精品 | 久久久久人妻一区精品色欧美 | 丁香花在线影院观看在线播放 | www国产精品内射老师 | 国产精品久久精品三级 | 日本肉体xxxx裸交 | 久久久无码中文字幕久... | 未满成年国产在线观看 | 亚洲一区av无码专区在线观看 | 亚洲成av人片天堂网无码】 | 成人一在线视频日韩国产 | 亚洲综合另类小说色区 | 中文字幕日产无线码一区 | 色狠狠av一区二区三区 | 97资源共享在线视频 | 精品无人区无码乱码毛片国产 | 亚洲综合无码久久精品综合 | 亚洲の无码国产の无码步美 | 在线播放免费人成毛片乱码 | 亚洲一区二区三区播放 | av在线亚洲欧洲日产一区二区 | 久久久久国色av免费观看性色 | 欧美人与禽猛交狂配 | 俺去俺来也www色官网 | 久久精品国产99久久6动漫 | 小鲜肉自慰网站xnxx | 国内精品九九久久久精品 | 日本乱人伦片中文三区 | 永久免费观看国产裸体美女 | 亚洲成a人一区二区三区 | 亚洲中文无码av永久不收费 | 欧美午夜特黄aaaaaa片 | 国产舌乚八伦偷品w中 | 国产内射爽爽大片视频社区在线 | 日日干夜夜干 | 精品人妻av区 | 婷婷色婷婷开心五月四房播播 | 国产综合色产在线精品 | 欧美日韩一区二区综合 | 免费无码av一区二区 | 国产精品自产拍在线观看 | 毛片内射-百度 | 中国女人内谢69xxxxxa片 | 欧美乱妇无乱码大黄a片 | 色 综合 欧美 亚洲 国产 | 免费播放一区二区三区 | 亚洲精品国产精品乱码不卡 | 国产亚洲精品久久久ai换 | 久久天天躁狠狠躁夜夜免费观看 | 中文字幕无码av波多野吉衣 | 男女猛烈xx00免费视频试看 | 99久久精品午夜一区二区 | 人妻互换免费中文字幕 | 丰满少妇人妻久久久久久 | 国产精品办公室沙发 | 亚洲中文字幕va福利 | 欧美熟妇另类久久久久久不卡 | 亚洲成av人综合在线观看 | 国产午夜亚洲精品不卡下载 | 久久亚洲a片com人成 | 麻豆蜜桃av蜜臀av色欲av | 国产亚洲tv在线观看 | 国产午夜精品一区二区三区嫩草 | 国产高清av在线播放 | 国产精品亚洲а∨无码播放麻豆 | 精品人人妻人人澡人人爽人人 | 亚洲爆乳大丰满无码专区 | 18精品久久久无码午夜福利 | 亚洲一区二区三区国产精华液 | 国产精品无码久久av | 夜精品a片一区二区三区无码白浆 | 性欧美大战久久久久久久 | 久精品国产欧美亚洲色aⅴ大片 | 国产精品怡红院永久免费 | 久在线观看福利视频 | 奇米影视7777久久精品 | 全球成人中文在线 | 国产色在线 | 国产 | 精品国产乱码久久久久乱码 | 日本免费一区二区三区最新 | 99er热精品视频 | 乱码午夜-极国产极内射 | 精品国产福利一区二区 | 色窝窝无码一区二区三区色欲 | 国产一区二区三区四区五区加勒比 | 欧美熟妇另类久久久久久多毛 | 性史性农村dvd毛片 | 捆绑白丝粉色jk震动捧喷白浆 | 男人的天堂2018无码 | 国产精品久久久久久无码 | 国产国产精品人在线视 | 性色欲情网站iwww九文堂 | 中文字幕日韩精品一区二区三区 | 波多野结衣av一区二区全免费观看 | 国产一区二区三区影院 | 色五月五月丁香亚洲综合网 | 久久精品国产99精品亚洲 | 无码午夜成人1000部免费视频 | 国产成人精品久久亚洲高清不卡 | 欧美性黑人极品hd | 欧美 日韩 人妻 高清 中文 | 亚洲精品午夜国产va久久成人 | 亚洲综合无码久久精品综合 | 日日躁夜夜躁狠狠躁 | 亚洲国产精品久久人人爱 | 日韩欧美成人免费观看 | 九月婷婷人人澡人人添人人爽 | 三上悠亚人妻中文字幕在线 | 少妇人妻偷人精品无码视频 | 曰韩无码二三区中文字幕 | 给我免费的视频在线观看 | 一区二区三区高清视频一 | 理论片87福利理论电影 | 人人澡人人透人人爽 | 亚洲热妇无码av在线播放 | 久久99精品久久久久婷婷 | 亚洲精品欧美二区三区中文字幕 | 国产免费观看黄av片 | 特级做a爰片毛片免费69 | 色噜噜亚洲男人的天堂 | 大肉大捧一进一出好爽视频 | 熟妇人妻无乱码中文字幕 | 黑人玩弄人妻中文在线 | 99久久婷婷国产综合精品青草免费 | 国产做国产爱免费视频 | 两性色午夜视频免费播放 | 永久免费观看美女裸体的网站 | 亚洲国产av精品一区二区蜜芽 | 九九久久精品国产免费看小说 | 色婷婷香蕉在线一区二区 | 免费人成在线视频无码 | 成人免费视频一区二区 | 亚洲色欲色欲欲www在线 | 亚洲成色www久久网站 | 中文字幕乱码人妻无码久久 | 久久久国产精品无码免费专区 | 久久久国产精品无码免费专区 | 丝袜人妻一区二区三区 | 伊人久久大香线蕉av一区二区 | 1000部夫妻午夜免费 | 亚洲天堂2017无码中文 | 日本高清一区免费中文视频 | 欧美兽交xxxx×视频 | 亚洲精品午夜国产va久久成人 | 亚洲大尺度无码无码专区 | 综合激情五月综合激情五月激情1 | 亚洲无人区一区二区三区 | 国产亚洲精品久久久久久国模美 | 荫蒂添的好舒服视频囗交 | 国内揄拍国内精品少妇国语 | 中文字幕无码免费久久99 | 黑人玩弄人妻中文在线 | 日日摸天天摸爽爽狠狠97 | 国产综合色产在线精品 | а√资源新版在线天堂 | 亚洲精品久久久久久一区二区 | 成人精品一区二区三区中文字幕 | 精品欧洲av无码一区二区三区 | 综合人妻久久一区二区精品 | 水蜜桃色314在线观看 | av人摸人人人澡人人超碰下载 | 一本久久a久久精品vr综合 | 97精品人妻一区二区三区香蕉 | 中文字幕日产无线码一区 | 国产精品亚洲一区二区三区喷水 | 日韩无套无码精品 | 在线精品亚洲一区二区 | 精品久久8x国产免费观看 | 精品厕所偷拍各类美女tp嘘嘘 | 女人被爽到呻吟gif动态图视看 | 粉嫩少妇内射浓精videos | 国产三级精品三级男人的天堂 | 色欲久久久天天天综合网精品 | 欧洲美熟女乱又伦 | 少妇高潮一区二区三区99 | 波多野结衣高清一区二区三区 | 国产猛烈高潮尖叫视频免费 | 亚洲成a人片在线观看无码 | 久久精品国产一区二区三区 | 国产乱子伦视频在线播放 | 18精品久久久无码午夜福利 | 日本护士毛茸茸高潮 | 免费乱码人妻系列无码专区 | 国产精品18久久久久久麻辣 | 中文字幕av伊人av无码av | 亚洲精品欧美二区三区中文字幕 | 亚洲伊人久久精品影院 | 国产午夜精品一区二区三区嫩草 | 99er热精品视频 | 日本欧美一区二区三区乱码 | 午夜精品一区二区三区在线观看 | 国产精品亚洲lv粉色 | 亚洲精品国产精品乱码不卡 | 精品乱码久久久久久久 | 精品国产麻豆免费人成网站 | √天堂中文官网8在线 | 久久精品国产日本波多野结衣 | 少妇邻居内射在线 | 强伦人妻一区二区三区视频18 | 中文字幕av无码一区二区三区电影 | 扒开双腿疯狂进出爽爽爽视频 | 一二三四社区在线中文视频 | 少妇的肉体aa片免费 | 久9re热视频这里只有精品 | 亚洲热妇无码av在线播放 | 中文无码精品a∨在线观看不卡 | 精品成人av一区二区三区 | 亚洲 a v无 码免 费 成 人 a v | 国产性生大片免费观看性 | 丰满少妇弄高潮了www | 成人免费无码大片a毛片 | 亚洲精品美女久久久久久久 | 日本一区二区三区免费高清 | 欧美成人高清在线播放 | 国产热a欧美热a在线视频 | 久久精品无码一区二区三区 | 国产激情无码一区二区app | 日本护士xxxxhd少妇 | 亚洲一区二区三区香蕉 | 亚洲午夜久久久影院 | 露脸叫床粗话东北少妇 | 日日碰狠狠丁香久燥 | 午夜无码人妻av大片色欲 | 中文字幕 亚洲精品 第1页 | 强伦人妻一区二区三区视频18 | 大肉大捧一进一出好爽视频 | 女人被爽到呻吟gif动态图视看 | 亚洲区欧美区综合区自拍区 | 欧美肥老太牲交大战 | 爆乳一区二区三区无码 | 国产国产精品人在线视 | √天堂资源地址中文在线 | 亚洲精品成人福利网站 | 欧美 丝袜 自拍 制服 另类 | 国产午夜亚洲精品不卡下载 | 亚洲人成无码网www | 亚洲成av人片天堂网无码】 | 97se亚洲精品一区 | 日韩精品无码一区二区中文字幕 | 成人免费无码大片a毛片 | 亚洲の无码国产の无码步美 | 色欲人妻aaaaaaa无码 | 国产精品久久久久无码av色戒 | 99久久久无码国产aaa精品 | 伊人久久大香线蕉av一区二区 | 两性色午夜免费视频 | 2019nv天堂香蕉在线观看 | 亚洲熟悉妇女xxx妇女av | 亚洲中文字幕va福利 | 午夜精品一区二区三区的区别 | 国产精品久久精品三级 | 大肉大捧一进一出视频出来呀 | 亚洲熟妇色xxxxx欧美老妇 | 精品无码一区二区三区的天堂 | 少妇一晚三次一区二区三区 | 亚洲中文字幕va福利 | 亚洲中文字幕在线无码一区二区 | 人妻中文无码久热丝袜 | 国产精品国产自线拍免费软件 | 伊人久久大香线蕉av一区二区 | 熟女少妇在线视频播放 | 丰满人妻一区二区三区免费视频 | 国产成人精品优优av | 97色伦图片97综合影院 | 久久久精品456亚洲影院 | 一二三四社区在线中文视频 | 国产超碰人人爽人人做人人添 | 女人和拘做爰正片视频 | 国产亚洲视频中文字幕97精品 | 日本熟妇人妻xxxxx人hd | 亚洲无人区一区二区三区 | 女人被男人躁得好爽免费视频 | 久久综合激激的五月天 | 亚洲爆乳无码专区 | 色爱情人网站 | 亚洲日韩av一区二区三区四区 | 亚洲人成人无码网www国产 | 鲁大师影院在线观看 | 亚洲中文无码av永久不收费 | 亚洲成熟女人毛毛耸耸多 | 一本久道久久综合婷婷五月 | 午夜丰满少妇性开放视频 | 中文字幕乱妇无码av在线 | 亚洲精品国产精品乱码不卡 | 岛国片人妻三上悠亚 | 欧美黑人巨大xxxxx | 国产在热线精品视频 | 国产亚洲精品久久久久久大师 | 99麻豆久久久国产精品免费 | 亚洲色欲色欲天天天www | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 88国产精品欧美一区二区三区 | 国产国语老龄妇女a片 | 荫蒂添的好舒服视频囗交 | 97夜夜澡人人双人人人喊 | 中文亚洲成a人片在线观看 | 无码国产色欲xxxxx视频 | 亚洲国产成人av在线观看 | 日日碰狠狠躁久久躁蜜桃 | 麻豆国产97在线 | 欧洲 | 久久精品人妻少妇一区二区三区 | 青草青草久热国产精品 | 荫蒂被男人添的好舒服爽免费视频 | 中文字幕无码av波多野吉衣 | 丰满妇女强制高潮18xxxx | 男女下面进入的视频免费午夜 | 中文无码成人免费视频在线观看 | 亚洲成a人片在线观看无码 |