精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

編寫高質(zhì)量可維護(hù)的代碼:一目了然的注釋

新聞 前端
有一些人認(rèn)為,好的代碼是自我解釋的。合適的命名和優(yōu)秀的代碼的確可以減輕開發(fā)人員閱讀代碼的工作量,對于不是特別復(fù)雜的代碼可能確實(shí)可以做到自我解釋。

 前言

有一些人認(rèn)為,好的代碼是自我解釋的。合適的命名和優(yōu)秀的代碼的確可以減輕開發(fā)人員閱讀代碼的工作量,對于不是特別復(fù)雜的代碼可能確實(shí)可以做到自我解釋。但并不是所有場景都可以做到這一點(diǎn),我們一起來了解一下“注釋”吧。

編程語言中對“注釋”的解釋

注釋就是對代碼的解釋和說明。注釋是開發(fā)人員在編寫程序時(shí),給一段代碼的解釋或提示,有助于提高程序代碼的可讀性。注釋不會被計(jì)算機(jī)編譯。

[[344072]]

要不要加注釋?為什么要加注釋?

注釋的存在就是為了方便自己的二次閱讀和代碼維護(hù)以及項(xiàng)目交接。可以更好的理解代碼,有助于提高協(xié)作效率,加快開發(fā)進(jìn)程。

試想,你添加了一段邏輯較為復(fù)雜的代碼,幾個月后再看,還能不能迅速看懂?你剛剛接手一個老項(xiàng)目,項(xiàng)目里基本沒有注釋且邏輯復(fù)雜,你能高效率的看懂代碼和了解業(yè)務(wù)嗎?

所以添加注釋還是有一定必要滴。

基礎(chǔ)篇

快捷鍵 windows 系統(tǒng): Ctrl+/ ios 系統(tǒng): Command+/

注釋的分類

  • HTML中的注釋
<div>
  這是一行文字
  <!-- 這是一行被注釋的文字 -->
</div>
  • CSS 中的注釋

  1. <style> 
  2.   div { 
  3.       /* color: #fff;  */ 
  4.    } 
  5. </style> 
  1. div { 
  2.     /* color: #fff;  */ 
  1. div { 
  2.     /* color: #fff;*/  /* 多行注釋*/ 
  3.     // font-size: 14px; // 單行注釋 
  4.     background: #000
  • 在 HTML 中
  • 在 .css文件中
  • 在 .less 或 .scss 文件中
  • JS 中的注釋

    • 用法

      • 可用于解釋 JavaScript 代碼,增強(qiáng)其可讀性。
      • 也可以用于阻止代碼執(zhí)行。
    • 單行注釋(行注釋)—— 以 // 開頭。任何位于 // 之后的文本都會被注釋

  • 多行注釋(塊注釋)——以 /* 開頭,以 */ 結(jié)尾。任何位于 /* 和 */ 之間的文本都會被注釋

    1. /* 
    2.   這是多行注釋 
    3.   定義一個數(shù)組 
    4. */ 
    5. var ary = []; 

  1. * 用注釋來阻止代碼執(zhí)行  —— 被注釋的 JS 代碼將不被執(zhí)行 
  2.  
  3. ```js 
  4. //alert("123")  // 執(zhí)行時(shí)未彈出該信息 
  5. alert("456")  // 執(zhí)行時(shí)彈出該信息 
  6. ``` 
  • 函數(shù)注釋

    • 一般以 /** 開頭,以 */ 結(jié)尾。任何位于 /** 和 */ 之間的文本都會被注釋
  1. /** 
  2.  * 提交 
  3.  * 
  4.  * @method onSubmit 
  5.  * @param {[Object]} 提交數(shù)據(jù) 
  6.  * @return  {[Bollean]}  [返回是否提交成功 ] 
  7.  */ 
  8. const onSubmit = (params = {}) => { 
  9.   const result = false
  10.     if (params) { 
  11.             result = true
  12.         } 
  13.     return result; 
  14. }; 
  • 特殊標(biāo)記注釋
    • TODO 在該注釋處有功能代碼待編寫,待實(shí)現(xiàn)的功能在說明中會簡略說明
    • FIXME 在該注釋處代碼需要修正,甚至代碼是錯誤的,不能工作,需要修復(fù),如何修正會在說明中簡略說明
    • XXX 在該注釋處代碼雖然實(shí)現(xiàn)了功能,但是實(shí)現(xiàn)的方法有待商榷,希望將來能改進(jìn),要改進(jìn)的地方會在說明中簡略說明
    • NOTE 在該注釋處說明代碼如何工作
    • HACK 在該注釋處編寫得不好或格式錯誤,需要根據(jù)自己的需求去調(diào)整程序代碼
    • BUG 在該注釋處有 Bug
  1. // TODO功能未完成,待完善 
  2. // FIXME  待修復(fù) 
  3. // XXX    實(shí)現(xiàn)方法待確認(rèn) 
  4. // NOTE   代碼功能說明 
  5. // HACK   此處寫法有待優(yōu)化 
  6. // BUG    此處有Bug 
  7. const arr = [] 

Tips:

  • 為什么 // 注釋可以在 .less 或 .scss 文件中使用,但是在 .html 和 .css 文件中不生效?
    • 在 MDN 中關(guān)于 CSS 注釋只有 /* */ 一種語法。但是在 LESS 和 SCSS 中支持注釋的語法和 js 中保持一致,有單行注釋 // 和多行注釋 /* */ 兩種。單行注釋編譯之后不會被保留。
  • 單行注釋為什么有時(shí)候?qū)懺诖a上方,有時(shí)候?qū)懺诖a后方?
    • 注釋可以書寫在代碼中的任意位置。個人理解,一般寫在代碼上方的時(shí)候意為對后面一段代碼的注釋,而寫在代碼后方的時(shí)候意為對本行代碼的注釋。

注釋寫法規(guī)范

  • 文件注釋

    • 位于文件頭部,一般包含概要、作者、版本改動信息以及修改時(shí)間等內(nèi)容
  1. /* 
  2. * 簡述當(dāng)前文件功能 
  3. * @author 作者名稱 
  4. * @version 版本號 最近編輯時(shí)間 
  5. * @description 該版本改動信息 
  6. */ 
  • 單行注釋

    • 總是在 // 后留一個空格
  1. // 這是一行注釋 
  • 多行注釋

    • 總是保持星號縱向?qū)R(結(jié)束符前留一個空格)
    • 不要在開始符、結(jié)束符所在行寫注釋
    • 盡量使用單行注釋代替多行注釋
    • 注釋函數(shù)時(shí),推薦使用多行注釋
  1. /* 
  2. 這里有一行注釋 
  3. 這里有一行注釋 
  4. 這里有一行注釋 
  5. */ 
  • 函數(shù)注釋

    • 其間每一行都以 * 開頭,且與第一行第一個 * 對齊
    • 注釋內(nèi)容與 * 間留一個空格
    • 必須包含標(biāo)簽注釋。例: ```javascript /**
  • 方法說明

  • @method 方法名

  • @for 所屬類名

  • @param {參數(shù)類型} 參數(shù)名 參數(shù)說明

  • @return {返回值類型} 返回值說明

  • /

注釋常用標(biāo)簽用法

  • @type {typeName}
    • * 表示任何類型
    • ? 表示可以為 null
    • ! 表示不能為 null
    • [] 表示數(shù)組 ```javascript /**
  • @type {number}
  • / var foo1;

/**

  • @type {*}
  • @desc 任何類型
  • / var foo2;

/**

  • @type {?string}
  • @desc string或者null
  • / var foo3;
  1. @param {<type>} name - some description 
  2.     * 非必傳參數(shù)需給參數(shù)名加上'[]' 
  3.     * 參數(shù)如有默認(rèn)值需用'='表示 
  4.     * 如果參數(shù)是object,可繼續(xù)用`@param`對其屬性進(jìn)行詳細(xì)說明 
  5.     * 若干個參數(shù)用`...`表示 
  6. ```javascript 
  7. /** 
  8.  * @func 
  9.  * @desc 一個帶參數(shù)的函數(shù) 
  10.  * @param {string} a - 參數(shù)a 
  11.  * @param {number} b=1 - 參數(shù)b默認(rèn)值為1 
  12.  * @param {string} c=1 - 參數(shù)c有兩種支持的取值  1—表示x  2—表示xx 
  13.  * @param {object} d - 參數(shù)d為一個對象 
  14.  * @param {string} d.e - 參數(shù)d的e屬性 
  15.  * @param {object[]} g - 參數(shù)g為一個對象數(shù)組 
  16.  * @param {string} g.h - 參數(shù)g數(shù)組中一項(xiàng)的h屬性 
  17.  * @param {string} [j] - 參數(shù)j是一個可選參數(shù) 
  18.  */ 
  19.  function foo(a, b, c, d, g, j) {} 
  20.  
  21. /** 
  22.  * @func 
  23.  * @desc 一個帶若干參數(shù)的函數(shù) 
  24.  * @param {...string} a - 參數(shù)a 
  25.  */ 
  26. function bar(a) {} 

了解更多可查看 JSDoc

拓展篇

IE 條件注釋(IE5+)

IE 條件注釋分為以下幾種情況:

  • 只允許 IE 解釋執(zhí)行 <!--[if IE]><![endif]-->

  • 只允許 IE 特定版本解釋執(zhí)行 <!--[if IE 7]><![endif]-->

  • 只允許非 IE 特定版本執(zhí)行注釋 <!--[if !IE 7]><![endif]-->

  • 只允許高于或低于 IE 特定版本執(zhí)行注釋 <!--[if gt IE 7]><![endif]-->

  1. <head> 
  2.     <title>IE 條件注釋</title> 
  3.  
  4.     <!-- 是 IE 時(shí) --> 
  5.   <!--[if IE]>  
  6.       <link href="style.css" rel="stylesheet" type="text/css" /> 
  7.   <![endif]--> 
  8.  
  9.   <!-- 是 IE 7 時(shí) --> 
  10.         <!--[if IE 7]> 
  11.      <link href="style.css" rel="stylesheet" type="text/css" /> 
  12.   <![endif]--> 
  13.  
  14.   <!-- 不是 IE 7 時(shí) --> 
  15.     <!--[if !IE 7]> 
  16.       <link href="style.css" rel="stylesheet" type="text/css" /> 
  17.   <![endif]--> 
  18.  
  19.     <!-- 大于 IE 7 時(shí) --> 
  20.     <!--[if gt IE 7]> 
  21.      <link href="style.css" rel="stylesheet" type="text/css" /> 
  22.   <![endif]--> 
  23.  
  24.     <!-- 小于 IE 7 時(shí) --> 
  25.      <!--[if lt IE 7]> 
  26.      <link href="style.css" rel="stylesheet" type="text/css" /> 
  27.   <![endif]--> 
  28. </head> 

# (井號)注釋 和 ''' (三引號)注釋

  • # 一般出現(xiàn)在各種腳本配置文件中,用法與 JS 單行注釋 // 基本相同。Python 中也常常用到
  • ''' 是 Python 中的多行注釋語法,用 ''' ''' 包含被注釋的段落
  1. # python 的單行注釋一 
  2.   print("I could have code like this.") # python 的單行注釋二 

print("This won't run.") # 被注釋的代碼

''' 被三引號包裹的段落 可以隨意折行 也可以注釋代碼 print("This won't run.") '''

  1. #### 注釋“被執(zhí)行”了? 
  2.  
  3. 眾所周知,注釋的代碼是不會被執(zhí)行的。但是小編在查資料時(shí)看到了一段比較有意思的代碼, Java 中的一行注釋“被執(zhí)行”了? 
  4.  
  5.  
  6. ```java 
  7. public class Test { 
  8.     public static void main(String[] args) { 
  9.         String name = "趙大"
  10.         // \u000dname="錢二"; 
  11.         System.out.println(name); 
  12.     } 

這段代碼執(zhí)行后的結(jié)果為 錢二 ,也就是說在這段代碼中,“被注釋”的那行代碼生效了!

這段代碼的問題出在 \u000d 這串特殊字符上。 \u000d 是一串 Unicode 字符,代表換行符。Java 編譯器不僅會編譯代碼,還會解析 Unicode 字符。在上面這段代碼把 \u000d 給解析了,后面的代碼就到了下面一行,超出了被注釋的范圍(單行注釋的注釋范圍僅在當(dāng)前行),所以執(zhí)行結(jié)果為 錢二 而非 趙大 。(如下)

  1. public class Test { 
  2.     public static void main(String[] args) { 
  3.         String name = "趙大"
  4.         // 
  5.         name="錢二"
  6.         System.out.println(name); 
  7.     } 

​ 所以本質(zhì)上在代碼執(zhí)行的時(shí)候 name="錢二" 并沒有被注釋,而是被換了行(奇怪的知識增加了)。 所以切記,注釋確實(shí)是不會被執(zhí)行的哦!

注釋相關(guān)插件

​ 在這里推薦幾個個人認(rèn)為比較好用的注釋相關(guān)的Vscode插件,可在 setting.json 文件下自定義設(shè)置(可通過 '文件—首選項(xiàng)—設(shè)置',打開 Vscode 文件 settings.json )

  • koroFileHeader 在 vscode 中用于生成文件頭部注釋和函數(shù)注釋的插件
  • 文件頭部添加注釋
    • 在文件開頭添加注釋,記錄文件信息/文件的傳參/出參等
    • 支持用戶高度自定義注釋選項(xiàng), 適配各種需求和注釋。
    • 保存文件的時(shí)候,自動更新最后的編輯時(shí)間和編輯人
    • 快捷鍵: window : ctrl+alt+i , mac : ctrl+cmd+i , linux : ctrl+meta+i

  • 在光標(biāo)處添加函數(shù)注釋
    • 在光標(biāo)處自動生成一個注釋模板
    • 支持用戶高度自定義注釋選項(xiàng)
    • 快捷鍵: window : ctrl+alt+t , mac : ctrl+cmd+t , linux : ctrl+meta+t
    • 快捷鍵不可用很可能是被占用了
    • 可自定義默認(rèn)參數(shù)

  • Better Comments 通過使用警報(bào),信息,TODO 等進(jìn)行注釋來改善代碼注釋。使用此擴(kuò)展,您將能夠?qū)⒆⑨尫诸悶椋?
    • 快訊
    • 查詢
    • 待辦事項(xiàng)
    • 強(qiáng)調(diào)
    • 注釋掉的代碼也可以設(shè)置樣式,以使代碼不應(yīng)該存在
    • 可自定義指定其他所需的注釋樣式

  • TODO Highlight 突出顯示TODO,F(xiàn)IXME和任何關(guān)鍵字
    • 高亮內(nèi)置關(guān)鍵字,可通過自定義設(shè)置覆蓋外觀
    • 也可自定義關(guān)鍵字

用事實(shí)說話

口說無憑,眼見為實(shí)。下面我們看下實(shí)際開發(fā)中的具體情況:

  • 沒有注釋
  1. const noWarehousetemIds = beSelectSkucontainer.reduce((arr, itemId) => { 
  2.   const res = Object.keys(selectRowskey[itemId]).every((skuId) => { 
  3.     const sku = selectRowskey[itemId][skuId]; 
  4.     return !!sku.warehouseCode || lodashGet(warehouses, '[0].code'); 
  5.   }); 
  6.   if (!res) { 
  7.     arr.push(itemId); 
  8.   } 
  9.   return arr; 
  10. }, []); 
  11. if (noWarehousetemIds.length > 0 || noStockItemIds.length > 0) { 
  12.   const itemIds = Array.from(new Set([...noWarehousetemIds, ...noStockItemIds])); 
  13.   const itemNames = itemIds.map(i => this.itemNameMap[i].itemName); 
  14.   return Modal.warning({ 
  15.     title: '錯誤提示'
  16.     content: `“${itemNames.join(',')}”庫存信息未完善,請完善庫存信息`, 
  17.   }); 
  • 一般般的注釋
  1. // 遍歷當(dāng)前所有選中的sku,查找出沒有庫存的itemId 
  2. const noStockItemIds = beSelectSkucontainer.reduce((arr, itemId) => { 
  3. const res = Object.keys(selectRowskey[itemId]).every((skuId) => { 
  4.   const sku = selectRowskey[itemId][skuId]; 
  5.   return !!sku.stockQuantity; 
  6. }); 
  7. if (!res) { 
  8.   arr.push(itemId); 
  9. return arr; 
  10. }, []); 
  11. // 有一條sku的庫存為空時(shí)進(jìn)入校驗(yàn) 
  12. if (noStockItemIds.length > 0) { 
  13. const itemNames = itemIds.map(i => this.itemNameMap[i].itemName); 
  14. return Modal.warning({ 
  15.   title: '錯誤提示'
  16.   content: `“${itemNames.join(',')}”庫存信息未完善,請完善庫存信息`, 
  17. }); 
  • 更好的注釋
  1. // 遍歷當(dāng)前所有選中的sku,查找出沒有庫存的itemId 
  2. const noStockItemIds = beSelectSkucontainer.reduce((arr, itemId) => { 
  3.   // selectRowskey是一個對象,以itemId為key,sku對象作為value,sku對象以skuId作為key,sku作為value,只有selectRowskey下所有itemId下的sku都有庫存才算校驗(yàn)通過 
  4.   /* 
  5.       數(shù)據(jù)格式: 
  6.       selectRowskey: { 
  7.         12345678: { // itemId 
  8.             123456: { // skuId 
  9.             name: 'sku', 
  10.             } 
  11.         } 
  12.       } 
  13.     */ 
  14.   const res = Object.keys(selectRowskey[itemId]).every((skuId) => { 
  15.       const sku = selectRowskey[itemId][skuId]; 
  16.       return !!sku.stockQuantity; 
  17.   }); 
  18.   // 只要有一條sku沒有庫存時(shí),就塞到arr中,返回給noStockItemIds數(shù)組 
  19.   if (!res) { 
  20.       arr.push(itemId); 
  21.   } 
  22.   return arr; 
  23. }, []); 
  24. // 有一條sku的庫存為空時(shí)進(jìn)入校驗(yàn) 
  25. if (noStockItemIds.length > 0) { 
  26.   // 根據(jù)id查找商品名稱 
  27.   const itemNames = itemIds.map(i => this.itemNameMap[i].itemName); 
  28.   Modal.warning({ 
  29.       title: '錯誤提示'
  30.       content: `“${itemNames.join(',')}”庫存信息未完善,請完善庫存信息`, 
  31.   }); 

看到上面這段代碼可以很明顯的體會到有沒有注釋以及注釋寫的清不清楚的重要性。若是寫了注釋但仍然看不懂,那還不如不寫。

所以注釋也不是隨便寫一寫就可以的,要描述某段代碼的功能,注明邏輯,讓開發(fā)者可以”無腦“瀏覽。

之前在工作群中看到有人發(fā)過這樣一張圖(如下圖),個人認(rèn)為是一個很好的代碼注釋的范例:

結(jié)語

看到這里,對于注釋的重要性各位已經(jīng)有自己的認(rèn)知。還有幾點(diǎn)是我們寫注釋時(shí)需要注意的:

  • 注釋內(nèi)容要簡潔、清楚明了。注釋簡述功能或?qū)崿F(xiàn)邏輯即可,無需每行代碼都添加注釋

  • 代碼若有修改,切記同步修改對應(yīng)的注釋。不要出現(xiàn)過期的注釋,否則會起到反作用

 

責(zé)任編輯:張燕妮 來源: ZooTeam Blog
相關(guān)推薦

2023-11-10 08:56:49

Springboot常用的注解

2023-09-14 10:42:46

SQL數(shù)據(jù)庫

2011-03-04 10:11:09

JavascriptAPI

2010-01-26 08:58:17

Windows 7啟動時(shí)間

2010-03-10 09:06:58

Windows 7啟動時(shí)間

2009-11-24 18:20:16

曙光Gridview管理

2015-08-25 08:29:11

編寫高質(zhì)量命名

2011-12-29 15:02:27

JavaScript

2015-08-25 08:42:36

高質(zhì)量代碼命名

2015-03-22 06:25:23

監(jiān)控寶云智慧

2017-07-14 09:54:47

代碼函數(shù)程序

2015-07-03 09:41:05

腳本編程編程語言比較

2021-03-12 14:06:03

谷歌代碼開發(fā)

2012-09-13 10:44:18

Python代碼

2021-01-12 16:28:41

5G運(yùn)營商韓國

2015-07-13 10:48:44

OC代碼程序員

2023-10-31 16:22:31

代碼質(zhì)量軟件開發(fā)Java

2024-03-07 11:39:24

HadolintDockerfile工具

2023-09-27 23:32:46

Python監(jiān)控進(jìn)程

2020-12-30 10:28:49

Windows 功能系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

日韩有码在线播放| 午夜精品久久久| 91九色蝌蚪国产| 中文字幕在线观看成人| 国产精品一区二区三区美女| 欧美性猛交xxxx乱大交| 亚洲欧美激情视频在线观看一区二区三区 | 免费看成人午夜电影| 国产熟妇一区二区三区四区| 日本久久黄色| 精品欧美乱码久久久久久| 欧美日韩在线中文| 国产激情在线视频| 91麻豆视频网站| 91美女片黄在线观看游戏| 日本一区二区不卡在线| 日本道不卡免费一区| 精品国产一区a| 日本中文字幕精品—区二区| 国产盗摄精品一区二区酒店| 日本一区二区高清| 国产精品theporn88| 中文字幕在线2018| 99国产精品久久久久久久| 中日韩美女免费视频网站在线观看 | 你懂的视频在线一区二区| 97国产成人无码精品久久久| 午夜宅男久久久| 欧美精品在线观看| 香蕉久久久久久久| 五月天亚洲色图| 欧美精品一区二区三区蜜桃| 一二三级黄色片| 91久久久久久白丝白浆欲热蜜臀| 午夜视频在线观看一区二区 | 日韩午夜av| 久久影视免费观看| 亚洲精品一区二区三区影院忠贞| 国产精品115| 日韩色在线观看| 男人添女人下面免费视频| 免费电影日韩网站| 午夜精品一区在线观看| 男女啪啪免费观看| 里番在线观看网站| 国产精品国产三级国产普通话三级| 欧美不卡三区| 四虎精品在永久在线观看 | 免费黄色国产视频| 韩日一区二区三区| 亚洲天堂色网站| a级片在线观看| 免费久久久久久久久| 亚洲精品成人久久久| 国产日韩视频一区| 久久丝袜视频| 日韩成人激情视频| 男生裸体视频网站| 九九在线高清精品视频| 国产性色av一区二区| 国产精品av久久久久久无| 欧美中文一区二区| 久久久精品久久久久| 特一级黄色录像| 欧美日韩免费| 91国语精品自产拍在线观看性色 | 中文字幕免费高清电视剧网站在线观看| 国产精品第一页第二页第三页| 中文字幕乱码一区二区三区| 国产视频中文字幕在线观看| 一区二区三区在线播放| 可以看毛片的网址| 英国三级经典在线观看| 日本久久一区二区| 精品久久久99| 超碰精品在线| 国产亚洲精品91在线| 免费成人深夜蜜桃视频| 亚洲精品97| 久久久女女女女999久久| 天天做天天爱夜夜爽| 免费一级欧美片在线观看| 成人欧美一区二区三区黑人孕妇| 草逼视频免费看| 91热门视频在线观看| 亚洲精品自在在线观看| 在线中文字幕视频观看| 欧美日韩免费观看中文| 99热一区二区| 精品国产导航| 中文字幕日韩精品有码视频| 亚洲av鲁丝一区二区三区| 亚洲免费播放| 国产美女久久精品| 蜜桃视频在线观看www| 国产午夜精品一区二区三区嫩草| 波多野结衣激情| 99riav视频在线观看| 欧美性猛交xxxx乱大交退制版| 九九九九九九九九| 欧洲精品一区| 久久香蕉国产线看观看av| 五月婷婷开心网| 国产资源在线一区| 久久综合九九| h片在线播放| 在线观看网站黄不卡| 色综合久久久无码中文字幕波多| 国产精品亚洲片在线播放| 欧美另类第一页| 天天干天天色综合| 国产99精品视频| 亚洲精品国产精品久久| 小视频免费在线观看| 69av一区二区三区| 日韩一区二区a片免费观看| 国产精品分类| 成人av在线网址| 免费av在线电影| 亚洲va欧美va天堂v国产综合| 亚洲午夜激情影院| 精品国产一区二区三区小蝌蚪| 久久久免费av| 成人黄色在线观看视频| 中文字幕中文乱码欧美一区二区| 人妻少妇被粗大爽9797pw| 中文字幕av一区二区三区四区| 日韩在线观看网站| 亚洲国产精品无码久久久| 不卡的av电影在线观看| 路边理发店露脸熟妇泻火| 日韩免费在线电影| 在线观看欧美日韩国产| 成人a v视频| 久久亚洲综合色| 波多野结衣乳巨码无在线| 一区视频网站| 色综合久久久888| 99久久精品国产一区色| 成人免费在线观看入口| 伊人国产在线视频| 欧美一区二区三| 国产精品香蕉国产| 超碰免费在线观看| 欧洲在线/亚洲| 色婷婷国产精品免| 日韩国产精品大片| 欧美一区二区三区电影在线观看| 亚洲一级少妇| 亚洲欧美日韩精品| 久久精品视频2| 国产亚洲一区二区在线观看| 少妇性l交大片| 偷拍一区二区| 国产精品69久久久久| 久草在线免费福利资源| 在线影院国内精品| 一级黄色片网址| 久久99精品国产91久久来源| 伊人情人网综合| 国产亚洲观看| 欧美激情综合亚洲一二区| 色婷婷综合视频| 欧美天天综合色影久久精品| 在线视频第一页| 麻豆免费看一区二区三区| 色乱码一区二区三区熟女| 中文字幕视频精品一区二区三区| 久久久久久中文字幕| 性xxxxbbbb| 欧美中文字幕一区二区三区亚洲| 成人午夜免费影院| 国产成人精品亚洲777人妖| 婷婷无套内射影院| 国产一区二区三区四区大秀| 国产一区二区丝袜| 久色国产在线| 亚洲一区www| 国产激情视频在线播放| 亚洲成人av免费| 国产综合精品久久久久成人av| 狠狠色狠狠色综合| 免费一级特黄特色毛片久久看| 国产精品欧美在线观看| 成人综合国产精品| 1234区中文字幕在线观看| 日韩激情片免费| 亚洲天堂自拍偷拍| 亚洲午夜一区二区三区| 一区二区三区四区免费| 国产麻豆精品theporn| 日本不卡在线观看视频| 亚洲午夜精品一区二区国产 | 成人小说亚洲一区二区三区| 91九色最新地址| 欧美激情图片小说| 国产午夜精品理论片a级大结局| 国产高清999| 久久久久中文| 大陆极品少妇内射aaaaaa| 香蕉人人精品| 99国产超薄丝袜足j在线观看| 中文字幕在线视频网站| 欧美成人激情视频免费观看| 国产毛片在线看| 精品国产伦一区二区三区免费| 欧美 亚洲 另类 激情 另类| 亚洲观看高清完整版在线观看| 四虎影视一区二区| xf在线a精品一区二区视频网站| 两性午夜免费视频| 日韩va欧美va亚洲va久久| 加勒比成人在线| 91精品99| 在线视频91| 亚洲人成网www| 国产精品对白刺激久久久| 欧美性生活一级| 日本免费久久高清视频| 超碰91在线观看| 欧美成人精品一区二区| 秋霞a级毛片在线看| 亚洲日韩欧美视频| 神马久久久久| 亚洲精品www久久久久久广东| h片在线免费看| 欧美日韩久久久| 国产黄色免费视频| 欧美日韩一区二区在线播放| 日产精品久久久久久久| 一二三四区精品视频| 免费在线黄色网| 中文字幕一区二区视频| 日本污视频网站| 欧美国产成人在线| 天堂资源在线视频| 国产精品天干天干在观线| 手机免费看av| 国产午夜精品美女毛片视频| 91l九色lporny| 国产午夜精品一区二区三区嫩草| 国产高潮呻吟久久| 久久久综合精品| 一区二区三区四区免费| 久久久国际精品| jizz中文字幕| 中文字幕欧美激情| 萌白酱视频在线| 综合自拍亚洲综合图不卡区| 日本中文在线视频| 亚洲自拍偷拍网站| 日本三级免费看| 精品久久久一区| 一二三区免费视频| 欧美系列日韩一区| 亚洲自拍偷拍另类| 欧美一级片在线| 亚洲av永久无码国产精品久久| 精品久久久久久无| 神马午夜在线观看| 亚洲男人的天堂在线| 东凛在线观看| 久久综合电影一区| 成人在线免费观看黄色| 欧美专区在线播放| 特黄毛片在线观看| 国产精品都在这里| 日本国产一区| 国产富婆一区二区三区| 日日狠狠久久偷偷综合色| 免费影院在线观看一区| 久久国产亚洲精品| 欧美交换配乱吟粗大25p| 一本一道久久综合狠狠老精东影业| 日韩精品视频久久| 蜜臀a∨国产成人精品| 97免费公开视频| 91在线视频播放地址| jizz18女人高潮| 一区二区三区高清| 在线精品免费视| 91精品国产色综合久久不卡蜜臀 | 88久久精品| 麻豆精品蜜桃一区二区三区| aa一级黄色片| 国产日产欧美一区二区三区| 女人18毛片毛片毛片毛片区二| 一区二区三区欧美在线观看| 久久久久女人精品毛片九一| 欧美人伦禁忌dvd放荡欲情| 亚洲福利在线观看视频| 国产一区二区三区四区福利| 色在线视频网| 国产成人福利视频| 欧美三级一区| 日本免费高清不卡| 欧美日韩精品一本二本三本| 国产aaaaa毛片| 丰满亚洲少妇av| 无码人中文字幕| 黄色91在线观看| 精品人妻无码一区二区色欲产成人 | 色88888久久久久久影院按摩| www黄色在线观看| 在线电影中文日韩| sm久久捆绑调教精品一区| 国产精品综合不卡av| 香蕉视频一区| 免费高清一区二区三区| 老司机精品视频在线| 中文字幕在线观看网址| 亚洲一区二区在线观看视频| 在线视频播放大全| 亚洲精品综合精品自拍| 色噜噜狠狠狠综合欧洲色8| 国产精品丝袜视频| 九九热精品视频在线观看| 777av视频| 国产乱对白刺激视频不卡| 手机看片国产日韩| 欧美日韩中文字幕日韩欧美| 丰满人妻妇伦又伦精品国产| 久久精品国产电影| a屁视频一区二区三区四区| 欧美高清性xxxxhd| 亚洲国产精品一区| 师生出轨h灌满了1v1| 亚洲视频资源在线| 在线免费av片| 一区二区三区www| 欧美xxx性| 久久涩涩网站| 亚洲在线网站| 亚洲天堂网一区二区| 大桥未久av一区二区三区| 亚洲AV午夜精品| 欧美高清无遮挡| 91精品丝袜国产高跟在线| 天堂а√在线中文在线| 国产成人亚洲精品狼色在线| 精品一区在线观看视频| 欧美一区二区三区人| av大全在线| 91九色偷拍| 国产一区久久| 亚洲少妇中文字幕| 亚洲电影一级黄| 欧美天堂在线视频| 91爱爱小视频k| 一本色道久久综合狠狠躁的番外| 久久久噜噜噜www成人网| 久久久五月婷婷| 日韩黄色一级视频| 日韩有码在线观看| 精品一区二区三区中文字幕在线 | 羞羞在线观看视频| 3d成人h动漫网站入口| 青草视频在线免费直播| 国产高清在线一区| 亚洲欧洲日本一区二区三区| 丰满大乳奶做爰ⅹxx视频| 色综合久久中文综合久久牛| 国产一区二区影视| 国产欧美精品一区二区三区介绍| 天天综合国产| 欧美激情一区二区三区p站| 欧美日韩精品在线播放| 成人在线观看免费| 91免费电影网站| 日韩午夜激情| 国产在线综合视频| 91精品福利在线一区二区三区| av剧情在线观看| 日韩福利视频| 国产麻豆成人精品| 国产精品久久久久久久久久久久久久久久久 | 久久精品二区三区| 影音先锋男人看片资源| 欧美一区二区三区免费在线看 | 亚洲一区二区在线观看视频| www.色日本| 日本a级片电影一区二区| 久久福利综合| 久久国产劲爆∧v内射| 欧美在线观看一区二区| 97caopron在线视频| 久久久神马电影| 精品亚洲国产成人av制服丝袜 | √新版天堂资源在线资源| 97se国产在线视频| 久久精品中文| 青青草手机在线观看| 精品香蕉一区二区三区| 成人免费观看49www在线观看| 免费看的黄色大片| 中文字幕在线一区免费| 日本不卡免费播放| 亚洲qvod图片区电影| 三级欧美韩日大片在线看| 久草国产在线观看|