黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 什么是可維護性的代碼(下)

什么是可維護性的代碼(下)

來源:千鋒教育
發布人:qyf
時間: 2022-09-14 16:28:59 1663144139

什么是可維護性的代碼

  五、變量類型透明化

  因為 JS 是一個弱類型語言,在定義變量的時候,不會限制數據類型

  但是我們在給變量賦值的時候,也要盡可能的做到數據類型統一

  當你需要定義一些變量,在后期操作中進行賦值的時候

  盡可能在定義的時候,給一個初始值表示一下你變量將來要存儲的數據類型

  比如:

  var count = 0;

  var name = '';

  var boo = false;

  var person = null;

  var todoList = [ ];

  如果你實在不想給一個初始值

  也可以使用注釋的形式表明一下你定義的變量, 將來存儲的是什么類型的數據

  var count /* Number */;

  var name /* String */;

  var boo /* Boolean */;

  六、代碼書寫習慣

  我們要保證一個良好的代碼書寫習慣

  七、鏈式編程的習慣

  我們來看一下下面這個代碼

  [ ... ].map(function () {

  // code ...

  }).filter(function () {

  // code ...

  }).reduce(function () {

  // code ...

  })

  其實沒啥問題, 而且也挺好的

  更甚至當代碼簡單一些的時候有人把它寫成一行

  [ ... ].map(function () { ... }).filter(function () { ... }).reduce(function () { ... })

  但是到了后期修改的時候,問題就會逐步顯示,一旦修改了第一個,那么后面的都有可能會出現問題

  而且當代碼量過大的時候,很難保證你不修改串行了

  · 我們可以把上面的代碼換成下面的方式

  [ ... ]

  .map(function () {

  // code ...

  })

  .filter(function () {

  // code ...

  })

  .reduce(function () {

  // code ...

  })

  這樣的話,看起來會舒服的多

  而且可以利用編輯器的代碼折疊,一個函數一個函數的來書寫

  八、書寫運算符的習慣

  很多人喜歡相對緊湊的書寫結構

  比如下面的代碼

  if (year%4===0&&year%100!==0||year%400===0) { ... }

  很簡單的一個判斷閏年的代碼

  但是當你的運算符很緊湊的時候,那么看起來就會比較費眼睛

  相對來說,我更喜歡在運算符兩邊都加上空格

  讓結構相對松散一些,看起來可能也容易一些

  我們也不用擔心這些空格,后期處理都會幫我們處理掉的

  if ( year % 4 === 0 && year % 100 !== 0 || year % 400 === 0) { ... }

  還有一種寫法

  if (

  year % 4 === 0 &&

  year % 100 !== 0 ||

  year % 400 === 0

  ) { ... }

  這個適用于條件比較長的時候使用

  看起來會更加清晰一些

  九、函數調用傳遞參數

  · 當調用一個函數,需要傳遞一個函數作為參數的時候

  · 我們通常都會直接書寫一個匿名函數或者箭頭函數在參數位置

  · 或者說傳遞一個復雜數據類型作為參數的時候,都會直接講對應的數組或者對象寫在參數位置

  · 比如下面這段代碼

  $.get('/xxx', {

  a: 100,

  b: 200

  }, function (res) {

  // code ...

  }, 'json')

  代碼沒有問題,但是一旦對象中數據過多

  或者函數中代碼過多的時候

  后期看起來就會很復雜

  我會建議把這些內容單獨書寫出來

  var params = {

  a: 100,

  b: 200

  }

  function success(res) {

  // code ...

  }

  $.get('/xxx', params, success, 'json')

  這樣一來, 不管是修改, 還是增加一些內容, 都會比較方便了

  十、功能性函數的單獨封裝

  把我們自定義的一些功能性函數進行單獨的封裝,放在一個單獨的 JS 文件中進行引入或者導入使用,其實就是模塊化的概念

  十一、松散耦合

  對于比較難以閱讀的代碼來說,強耦合的代碼是最難閱讀的,JS 代碼本身層面上的耦合我們就不說了,大家都應該了解面向對象編程和模塊化編程

  十二、HTML 和 JavaScript 的耦合

  在前端開發中,我們經常會見到有些人寫代碼會把一些簡單的事件直接寫到 html 結構上

  <button onclick="doSomething()" ></button> 

  從代碼層面上來說完全沒有問題

  但是實際上,這個是 HTML 和 JavaScript 的強耦合現象

  第一: 每次對于代碼進行的修改,都要從 HTML 和 JavaScript 兩個位置去進行修改

  第二: 代碼引入位置不可變,一定要保證在用戶點擊之前就已經有函數存在了,不然一定會報錯的

  比較好的方法就是進行 HTML 和 JavaScript 的分離

  在 .js 文件中獲取 DOM 元素

  通過事件綁定的形式來完成操作

  var btn = document.querySelector('button')

  btn.addEventListener('click', doSomething)

  還有一種情況更常見, 就是在 JS 代碼中為了渲染頁面而進行字符串拼接

container.innerHTML = `

<div>

...

<p> ... </p>

<span> ... </span>

</div>

  這個代碼也是完全沒有問題的,而且大部分同學都會這樣書寫代碼,因為省時省力

  但是這樣的情況,一旦渲染到頁面上,出現樣式問題需要調整的時候

  我們在 HTML 結構中很難找到內容來修改,必須要到 JavaScript 代碼里面去修改

  如果我們的字符串拼接是在循環里面完成的話,那么有可能你添加一個或者刪除一個標簽的時候,導致整個頁面崩潰

  比較好的做法

  使用一些第三方小腳本或者模板引擎來進行渲染:

  比如:art-template / e.js / ...

  真的需要這樣渲染的時候,那么在原始 html 結構中以注釋的形式留下一部分渲染內容

<div class="container">

    <!-- 商品詳情信息渲染結構

    <div>

        ...

        <p> ... </p>

        <span> ... </span>

    </div>

    -->

</div>

  · 當 HTML 和 JavaScript 解耦以后

  · 可以大量節省我們的排錯時間, 和錯誤的準確定位

  十三、CSS 和 JavaScript 的耦合

  在前端的開發中,使用 JS 來操作一些元素的樣式,是在常見不過的事情了

  比如我們經常會寫

  ele.style.color = 'red' ;

  ele.style.display = 'none' ;

  這樣書寫代碼其實沒有大問題

  對于渲染也不會造成很大的困擾

  但是,一旦我們需要修改樣式的時候,那么就比較麻煩了

  因為有的樣式可能需要在 .css 文件內修改,有的樣式需要在 .js 文件內修改

  · 比較好的做法是, 把我們需要修改的樣式寫成一個單獨類名下

  · 放在 .css 文件內

  · 我們在代碼里面通過操作元素的類名來進行修改

  ele.classList.add('active')

  ele.classList.remove('active')

  這樣做保證了樣式和行為的分離,我們在調整頁面樣式的時候,不需要 JS,直接在 CSS 中修改就可以

  十四、事件處理 和 應用邏輯 的耦合

  在開發過程中, 我們經常要處理一些事件,并且在事件里面要進行一些邏輯的運算

  比如:我們在點擊登錄的時候,要對用戶填寫的內容進行一個正則的驗證,然后提交到服務器

  ele.addEventListener('submit', function () {

  let username = xxx.value

  let password = xxx.value

  // 正則驗證

  if ( ... ) { ... }

  if ( ... ) { ... }

  // 提交到服務器

  var xhr = new XMLHttpRequest()

  xhr.open( ... )

  xhr.send( ... )

  xhr.onload = function () { ... }

  })

  這是一段合法的代碼

  但是函數里面包含了太多的內容

  有事件處理

  有邏輯處理

  有請求發送

  這樣就相當于在一個函數里面做了太多的事情

  這個代碼的邏輯運算還是比較少的,但是一旦邏輯運算多了以后,那么后期閱讀的時候就很麻煩了

  我們可以把里面的邏輯運算和請求發送都單獨提取出來,變成下面這個形式:

  function validateValue(val) {

  // 正則驗證

  if ( ... ) { ... }

  if ( ... ) { ... }

  // 將驗證結果返回

  return true // or false

  }

  function sendAjax() {

  // 發送請求的業務邏輯

  }

  ele.addEventListener('submit', function () {

  let username = xxx.value

  let password = xxx.value

  // 正則驗證

  if (!validateValue( xxx )) return

  // 提交到服務器

  sendAjax()

  })

  這樣一來,只要我們給函數寫好注釋,那么后期的時候,哪里出現問題,我們可以快速準確的定位問題所在位置

  十五、尊重對象所有權

  · JavaScript 的動態天性決定了沒有什么是不能修改的

  · 從代碼層面出發,我們可以修改任何內容,包括向 Object 的 prototype 上擴展一些方法,,向 Array 的 prototype 上擴展一些方法

  · 但是在真實的企業級開發過程中,我們要絕對的尊重每一個對象的所有權

  不要修改任何不屬于你的代碼,如果某一個對象不是由你負責創建或者維護,那么你也不要修改他的構造函數

  在好久好久以前:

  我接觸過一個叫做 prototype 的第三方庫

  它里面向 document 對象上擴展了一個叫做 getElementsByClassName 的方法

  是不是看起來很無聊,但是在沒有 getElementsByClassName 的年代,確實很好用

  并且,擴展的這個 getElementsByClassName 方法的返回值是一個 Array 并不是我們后來使用的 NodeList

  而且還在實例身上擴展了一個叫做 each() 的方法,專門用來遍歷

  我們用起來的時候就會很方便

  document.getElementsByClassName('item').each()

  這個很好,而且對代碼開發進行了簡化

  但是,一旦瀏覽器廠商開始支持這個方法了,那么你的方法就會出現問題了

  后來,在所有瀏覽器廠商都支持了 getElementsByClassName 以后

  當在使用這個方法的時候,因為和原生的重名了

  會出現代碼的大面積報錯

  這個就是尊重代碼所有權

  因為你不知道瀏覽器廠商什么時候會 告知 或 不告知 的更新一些內容,或者修改一些 API

  所以,不要修改任何不屬于你的內容

  十六、盡量不聲明全局變量

  和尊重對象所有權有密切關系的就是盡可能少的聲明全局變量

  拋開變量污染的層面不說,我們的每一個全局變量其實都是在向 window 上添加成員

  var name = 'Jack'

  function getInfo() { ... }

  這都是全局變量,用起來也沒什么問題

  但是也確實是在 window 上掛載了兩個名字

  我們在開發自己的代碼的時候, 盡可能的在全局制作一個命名空間,然后把我們所有需要的內容全部放在里面

  var myApp = {

  name: 'jack',

  getInfo () { ... }

  }

  這樣一來, 我們只是向 window 上掛載了一個 myApp

  剩下的所有東西都在我自己的命名空間里面

  一旦出現問題,你能準確的知道是你自己定義的變量或者方法出現了問題,還是原生的變量或者方法出現了問題

  這個也是前端從沒有模塊化到模塊化開發的演變過程的原始階段:

  o 獨立命名空間

  o IIFE

  o AMD / CMD

  o CommonJS

  o ES6 模塊化

  十七、習慣使用常量

  我們在開發的過程中,經常要使用一些變量來操作某些內容

  o 任何出現一次以上的內容,都應該提取出來變成一個常量的定義

  o 任何一個需要顯示給用戶看到的文本內容,都應該提取出來變成一個常量

  o 任何一個變量,在定義的時候都要考慮,將來會不會發生變化,如果不發生變化,那么就直接定義成常量

  o 包括我們在操作一些類名的時候,應該把這些類名提取出來做成常量,然后統一操作

  這樣一來,我們可以避免因為不小心修改變量而導致出現的問題,也可以在代碼的各個部分保證代碼數據的統一,避免一個東西這里修改了,那里沒有修改的問題

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
開班信息
北京校區
  • 北京校區
  • 大連校區
  • 廣州校區
  • 成都校區
  • 杭州校區
  • 長沙校區
  • 合肥校區
  • 南京校區
  • 上海校區
  • 深圳校區
  • 武漢校區
  • 鄭州校區
  • 西安校區
  • 青島校區
  • 重慶校區
  • 太原校區
  • 沈陽校區
  • 南昌校區
  • 哈爾濱校區
999精品影视在线观看| 午夜欧美成人久久久久久| 亚欧视频在线| 亚洲天堂免费| 国产美女在线一区二区三区| 国产一区免费观看| 精品国产三级a∨在线观看| 日韩一级黄色大片| 国产不卡在线看| 色综合久久天天综合| 四虎影视精品永久免费网站| 国产不卡在线看| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 中文字幕一区二区三区精彩视频| 精品国产一区二区三区久久久狼| 黄视频网站在线免费观看| 欧美电影免费看大全| 成人a级高清视频在线观看| 日韩中文字幕在线亚洲一区| 欧美另类videosbestsex视频| 欧美一区二区三区在线观看| 久久国产精品只做精品| 日本特黄特黄aaaaa大片| 国产不卡在线观看| 午夜欧美成人香蕉剧场| 欧美激情伊人| 午夜激情视频在线观看| 99久久精品国产麻豆| 国产视频一区二区在线播放| 久久精品大片| 久久精品道一区二区三区| 国产伦精品一区三区视频| 欧美国产日韩在线| 999久久66久6只有精品| 亚洲 国产精品 日韩| 91麻豆tv| 午夜在线观看视频免费 成人| 99热精品在线| 欧美爱色| 在线观看成人网| 久久精品道一区二区三区| 成人av在线播放| 日本在线www| 国产不卡在线观看| 亚洲 激情| 成人免费观看男女羞羞视频| 国产视频一区二区在线观看| 91麻豆爱豆果冻天美星空| 国产91丝袜高跟系列| 国产原创视频在线| 在线观看成人网| 成人在免费观看视频国产| 久草免费在线观看| 99久久视频| 黄色福利片| 午夜家庭影院| 香蕉视频亚洲一级| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 欧美激情一区二区三区视频 | 一a一级片| 免费一级片网站| 国产欧美精品| 精品视频在线观看免费| 可以免费看污视频的网站| 九九热国产视频| 午夜在线亚洲| 四虎久久影院| 天堂网中文在线| 成人影院一区二区三区| 久久久久久久网| 国产原创视频在线| 欧美另类videosbestsex久久| 欧美日本免费| a级毛片免费观看网站| 国产国产人免费视频成69堂| 国产不卡精品一区二区三区| 欧美另类videosbestsex久久| 国产高清视频免费观看| 国产视频网站在线观看| 欧美日本国产| 国产伦理精品| 91麻豆国产福利精品| 你懂的日韩| 国产原创中文字幕| 国产亚洲精品aaa大片| 毛片的网站| 午夜在线亚洲男人午在线| 亚飞与亚基在线观看| 精品在线观看国产| 二级片在线观看| 韩国毛片免费| 99久久精品费精品国产一区二区| 中文字幕97| 麻豆污视频| 九九九国产| 沈樵在线观看福利| 国产91丝袜高跟系列| 国产a视频精品免费观看| 久久国产一区二区| 一级毛片视频在线观看| 成人在免费观看视频国产| 美女免费精品视频在线观看| 免费的黄色小视频| a级黄色毛片免费播放视频| 青青久久国产成人免费网站| 一本伊大人香蕉高清在线观看| 久久99中文字幕| 九九久久99综合一区二区| 欧美国产日韩一区二区三区| 精品国产一区二区三区国产馆| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日韩免费在线视频| 日韩中文字幕一区| 日本在线www| 国产成人啪精品| 免费毛片基地| 国产欧美精品午夜在线播放| 国产不卡在线观看视频| 黄色福利片| 999精品在线| 韩国三级香港三级日本三级| 国产视频久久久| 国产极品精频在线观看| 精品视频一区二区三区免费| 国产a视频精品免费观看| 免费国产在线观看不卡| 国产a视频| 欧美激情一区二区三区在线播放| 久久久久久久男人的天堂| 久久精品免视看国产明星| 精品国产三级a∨在线观看| 午夜在线影院| 九九干| 日本在线不卡视频| 免费的黄视频| 99色视频在线| 精品久久久久久中文字幕一区| 精品视频在线观看一区二区三区| 成人免费一级纶理片| 国产成人女人在线视频观看| 国产成+人+综合+亚洲不卡 | 欧美a级v片不卡在线观看| 欧美日本免费| 精品国产三级a∨在线观看| 日韩专区亚洲综合久久| 青青青草影院| 欧美a级片视频| 国产不卡在线观看| 国产91丝袜在线播放0| 欧美激情伊人| 成人免费高清视频| 尤物视频网站在线| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 久久99青青久久99久久| 沈樵在线观看福利| 青青久久精品国产免费看| 国产网站在线| 精品视频一区二区三区| 台湾毛片| 国产成人啪精品| 999精品视频在线| 久草免费在线色站| 久久成人综合网| 天天做人人爱夜夜爽2020毛片| 精品国产一区二区三区免费| 久久成人综合网| 久久99爰这里有精品国产| 国产韩国精品一区二区三区| 国产麻豆精品高清在线播放| 天天做日日干| 久久99这里只有精品国产| 亚洲不卡一区二区三区在线| 韩国毛片基地| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美大片一区| 亚洲 国产精品 日韩| 国产伦精品一区二区三区无广告| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 亚洲女初尝黑人巨高清在线观看| 欧美日本免费| a级黄色毛片免费播放视频| 国产欧美精品午夜在线播放| 日韩中文字幕在线播放| 精品在线免费播放| 久久福利影视| 香蕉视频亚洲一级| a级毛片免费全部播放| 99热视热频这里只有精品| 午夜激情视频在线播放| 99久久视频| 国产一区二区精品久| 欧美一级视频免费观看| 深夜做爰性大片中文| a级黄色毛片免费播放视频| 在线观看成人网| 国产91精品系列在线观看| 国产91精品系列在线观看| 韩国毛片免费大片| 亚洲女初尝黑人巨高清在线观看| 欧美a级v片不卡在线观看|