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

前端JS面試中經常會被問到的幾個問題

開發 前端
本文不是討論新的 JavaScript 庫、常見的開發實踐或任何新的 ES6 函數,只是聊聊在面試中出現頻率比較高的的幾道面試題。

 本文不是討論新的 JavaScript 庫、常見的開發實踐或任何新的 ES6 函數,只是聊聊在面試中出現頻率比較高的的幾道面試題。

 

 

 

[[285702]]

 

問題1、事件的節流(throttle)與防抖(debounce)

有些瀏覽器事件可以在短時間內快速觸發多次,比如調整窗口大小或向下滾動頁面。例如,監聽頁面窗口滾動事件,并且用戶持續快速地向下滾動頁面,那么滾動事件可能在 3 秒內觸發數千次,這可能會導致一些嚴重的性能問題。那我們應該如何去避免這樣的問題,下面有兩種方法:

1、節流(throttle)

節流的主要思想在于:在某段時間內,不管你觸發了多少次回調,都只認第一次,并在計時結束時給予響應。

代碼示例:

 

  1. // fn是我們需要包裝的事件回調, interval是時間間隔的閾值 
  2. function throttle(fn, interval) { 
  3.   // last為上一次觸發回調的時間 
  4.   let last = 0 
  5.    
  6.   // 將throttle處理結果當作函數返回 
  7.   return function () { 
  8.       // 保留調用時的this上下文 
  9.       let context = this 
  10.       // 保留調用時傳入的參數 
  11.       let args = arguments 
  12.       // 記錄本次觸發回調的時間 
  13.       let now = +new Date() 
  14.        
  15.       // 判斷上次觸發的時間和本次觸發的時間差是否小于時間間隔的閾值 
  16.       if (now - last >= interval) { 
  17.       // 如果時間間隔大于我們設定的時間間隔閾值,則執行回調 
  18.           last = now; 
  19.           fn.apply(context, args); 
  20.       } 
  21.     } 
  22.  
  23. // 用throttle來包裝scroll的回調 
  24. const better_scroll = throttle(() => console.log('觸發了滾動事件'), 1000) 
  25.  
  26. document.addEventListener('scroll', better_scroll) 

2、防抖(Debounce)

防抖的主要思想在于:我會等你到底。在某段時間內,不管你觸發了多少次回調,我都只認最后一次。

代碼示例:

 

  1. // fn是我們需要包裝的事件回調, delay是每次推遲執行的等待時間 
  2. function debounce(fn, delay) { 
  3.   // 定時器 
  4.   let timer = null 
  5.    
  6.   // 將debounce處理結果當作函數返回 
  7.   return function () { 
  8.     // 保留調用時的this上下文 
  9.     let context = this 
  10.     // 保留調用時傳入的參數 
  11.     let args = arguments 
  12.  
  13.     // 每次事件被觸發時,都去清除之前的舊定時器 
  14.     if(timer) { 
  15.         clearTimeout(timer) 
  16.     } 
  17.     // 設立新定時器 
  18.     timer = setTimeout(function () { 
  19.       fn.apply(context, args) 
  20.     }, delay) 
  21.   } 
  22.  
  23. // 用debounce來包裝scroll的回調 
  24. const better_scroll = debounce(() => console.log('觸發了滾動事件'), 1000) 
  25.  
  26. document.addEventListener('scroll', better_scroll) 

3、節流和防抖的實際應用

在我們的應用中,單一的應用節流或者防抖都不是一個好主意。

場景:如果用戶的操作十分頻繁——他每次都不等 debounce 設置的 delay 時間結束就進行下一次操作,于是每次 debounce 都為該用戶重新生成定時器,回調函數被延遲了不計其數次。頻繁的延遲會導致用戶遲遲得不到響應,用戶同樣會產生“這個頁面卡死了”的觀感。

為了避免弄巧成拙,我們需要借力 throttle 的思想,打造一個“有底線”的 debounce——等你可以,但我有我的原則:delay 時間內,我可以為你重新生成定時器;但只要delay的時間到了,我必須要給用戶一個響應。這個節流與防抖結合的思路。

代碼示例:

 

  1. // fn是我們需要包裝的事件回調, delay是時間間隔的閾值 
  2. function throttle(fn, delay) { 
  3.   // last為上一次觸發回調的時間, timer是定時器 
  4.   let last = 0, timer = null 
  5.   // 將throttle處理結果當作函數返回 
  6.    
  7.   return function () {  
  8.     // 保留調用時的this上下文 
  9.     let context = this 
  10.     // 保留調用時傳入的參數 
  11.     let args = arguments 
  12.     // 記錄本次觸發回調的時間 
  13.     let now = +new Date() 
  14.      
  15.     // 判斷上次觸發的時間和本次觸發的時間差是否小于時間間隔的閾值 
  16.     if (now - last < delay) { 
  17.     // 如果時間間隔小于我們設定的時間間隔閾值,則為本次觸發操作設立一個新的定時器 
  18.        clearTimeout(timer) 
  19.        timer = setTimeout(function () { 
  20.           last = now 
  21.           fn.apply(context, args) 
  22.         }, delay) 
  23.     } else { 
  24.         // 如果時間間隔超出了我們設定的時間間隔閾值,那就不等了,無論如何要反饋給用戶一次響應 
  25.         last = now 
  26.         fn.apply(context, args) 
  27.     } 
  28.   } 
  29.  
  30. // 用新的throttle包裝scroll的回調 
  31. const better_scroll = throttle(() => console.log('觸發了滾動事件'), 1000) 
  32.  
  33. document.addEventListener('scroll', better_scroll) 

問題2、事件委托代理

傳統的事件綁定方式:

 

  1. <ul id="todo-app"
  2.   <li class="item">Walk the dog</li> 
  3.   <li class="item">Pay bills</li> 
  4.   <li class="item">Make dinner</li> 
  5.   <li class="item">Code for one hour</li> 
  6. </ul> 
  7.  
  8. document.addEventListener('DOMContentLoaded'function() { 
  9.   let app = document.getElementById('todo-app'); 
  10.   let itimes = app.getElementsByClassName('item'); 
  11.  
  12.   for (let item of items) { 
  13.     item.addEventListener('click'function(){ 
  14.       alert('you clicked on item: ' + item.innerHTML); 
  15.     }) 
  16.   } 
  17. }) 

雖然這在技術上是沒什么問題的,但問題是要將事件分別綁定到每個項。這對于目前 4 個元素來說,沒什么大問題,但是如果在待辦事項列表中添加了 10,000 項(他們可能有很多事情要做)怎么辦?然后,函數將創建 10,000 個獨立的事件偵聽器,并將每個事件監聽器綁定到 DOM ,這樣代碼執行的效率非常低下。如何高效的進行事件綁定:

基于事件委托的代碼示例:

 

  1. document.addEventListener('DOMContentLoaded'function() { 
  2.   let app = document.getElementById('todo-app'); 
  3.  
  4.   app.addEventListener('click'function(e) { 
  5.     if (e.target && e.target.nodeName === 'LI') { 
  6.       let item = e.target; 
  7.       alert('you clicked on item: ' + item.innerHTML) 
  8.     } 
  9.   }) 
  10. }) 

問題3、閉包的使用

閉包常常出現在面試中,以便面試官衡量你對 JS 的熟悉程度,以及你是否知道何時使用閉包。

閉包基本上是內部函數可以訪問其范圍之外的變量。 閉包可用于實現隱藏變量和創建函數工廠。

不正確的閉包應用:

 

  1. const arr = [10, 12, 15, 21]; 
  2. for (var i = 0; i < arr.length; i++) { 
  3.   setTimeout(function() { 
  4.     console.log('The index of this number is: ' + i); 
  5.   }, 3000); 

如果運行上面代碼,3 秒延遲后你會看到,實際上每次打印輸出是 4,而不是期望的 0,1,2,3 。

原因是因為 setTimeout 函數創建了一個可以訪問其外部作用域的函數(閉包),該作用域是包含索引 i 的循環。 經過 3 秒后,執行該函數并打印出 i 的值,該值在循環結束時為 4,因為它循環經過0,1,2,3,4并且循環最終停止在 4。

正確的閉包使用:

 

  1. //方法一: 
  2. const arr = [10, 12, 15, 21]; 
  3.  
  4. for (var i = 0; i < arr.length; i++) { 
  5.   setTimeout(function(i_local){ 
  6.     return function () { 
  7.       console.log('The index of this number is: ' + i_local); 
  8.     } 
  9.   }(i), 3000) 
  10.  
  11. //方法二: 
  12. const arr = [10, 12, 15, 21]; 
  13. for (let i = 0; i < arr.length; i++) { 
  14.   setTimeout(function() { 
  15.     console.log('The index of this number is: ' + i); 
  16.   }, 3000); 

 

責任編輯:華軒 來源: 今日頭條
相關推薦

2019-03-06 14:26:31

Javascript面試前端

2018-02-01 09:26:12

面試算法題程序員

2010-04-23 10:30:17

Oracle移植

2022-01-12 09:08:37

索引JavaReference對象

2019-02-21 10:49:51

Redis持久化恢復

2020-11-20 10:47:47

網絡面試開發

2010-04-06 13:07:45

Oracle數據庫

2021-12-29 22:29:10

JavaScript前端數組

2021-10-12 00:04:24

腳本備份MariDB

2011-04-11 13:25:59

Sybase安裝

2021-03-04 22:15:36

JavaScript編程開發

2011-04-11 13:28:31

Oracle安裝

2010-06-04 19:31:25

遠程MySQL權限

2022-06-07 07:37:40

線程進程開發

2020-05-14 08:13:56

JDK命令Java

2010-04-21 08:50:08

2013-05-06 15:42:49

2022-05-24 16:09:38

前端腳本

2010-06-09 16:57:14

路由選擇協議

2011-07-01 09:31:49

.net
點贊
收藏

51CTO技術棧公眾號

欧美性受xxxx白人性爽| 亚洲精品91美女久久久久久久| 日本黄色a视频| 国产高清免费av| 99亚洲视频| 中文字幕在线观看日韩| 91人人澡人人爽| 欧美舌奴丨vk视频| 亚洲欧美激情小说另类| 久久久一本精品99久久精品66| 国产精品sm调教免费专区| 欧美日韩国产亚洲一区| 亚洲午夜色婷婷在线| 一个人看的视频www| 91精品论坛| 玉米视频成人免费看| 日韩电影免费观看在| 国产偷拍一区二区| 天使萌一区二区三区免费观看| 欧美精品在线免费| 污污视频网站在线免费观看| 国内精品麻豆美女在线播放视频| 欧美日韩第一区日日骚| 18岁网站在线观看| 欧美性受ⅹ╳╳╳黑人a性爽| 久久久久久久久久久黄色 | 日韩精品一区国产| 欧美在线影院一区二区| 日韩中文字幕在线视频观看| h片在线免费| 国产精品国产三级国产aⅴ原创| 国产主播一区二区三区四区| 精品久久久久中文慕人妻| 日韩精品欧美精品| 26uuu亚洲伊人春色| 在线免费日韩av| 国产精品麻豆久久| 深夜福利91大全| 魔女鞋交玉足榨精调教| 国产极品模特精品一二| 日韩一区二区三区在线| 九一精品久久久| 欧美成人福利| 欧美日韩国产一区二区三区地区| 国产xxxxx在线观看| 精品极品在线| 欧美日韩精品二区| 能在线观看的av| 中文在线最新版地址| 激情成人中文字幕| 国产在线精品91| av在线最新| 欧美日韩亚洲天堂| 无码人妻丰满熟妇区毛片18| 亚洲美女尤物影院| 黑人巨大精品欧美一区免费视频| 亚洲人成无码网站久久99热国产 | 4438全国成人免费| 五月天综合激情网| 久久成人免费| 国产精品免费久久久| 久久精品国产亚洲av麻豆蜜芽| 久久精品首页| 国产欧美亚洲视频| 国产99对白在线播放| 国产成人免费xxxxxxxx| 国产区二精品视| 香蕉久久一区二区三区| 2022国产精品视频| 亚洲国产精品一区在线观看不卡| 在线看av的网址| 亚洲私人影院在线观看| 激情成人开心网| 91福利区在线观看| 色哟哟精品一区| 亚洲欧美日韩精品一区| 国产一区二区三区亚洲综合| 精品99999| 日本aaa视频| 国产一区国产二区国产三区| 最近2019免费中文字幕视频三| 日本精品在线免费观看| 永久亚洲成a人片777777| 久久理论片午夜琪琪电影网| 亚洲欧美偷拍一区| 精品午夜久久福利影院| 风间由美久久久| 暖暖视频在线免费观看| 国产精品国产自产拍在线| 一本色道久久88亚洲精品综合| 国产精品高颜值在线观看| 在线视频综合导航| 麻豆传媒在线看| 奇米色欧美一区二区三区| 精品国产一区久久久| 日本一级淫片色费放| 日韩电影网1区2区| 成人激情直播| 在线视频三区| 五月婷婷综合激情| 污视频网址在线观看| 米奇精品关键词| 日韩一级裸体免费视频| 91久久国产视频| 黄色资源网久久资源365| 久久久久se| 在线heyzo| 欧洲人成人精品| 白嫩情侣偷拍呻吟刺激| 99久久夜色精品国产亚洲狼| 97精品国产91久久久久久| 中文文字幕一区二区三三| 成人一区在线观看| 在线观看免费91| 香蕉视频亚洲一级| 亚洲第一区第二区| 亚洲女人久久久| 日韩中文字幕一区二区三区| 国产精品青青草| 成人av黄色| 69成人精品免费视频| 精品人伦一区二区| 午夜在线一区二区| 国产精品大全| 成人免费视屏| 91精品国产全国免费观看| 国产91丝袜美女在线播放| 国产精品久久久亚洲一区| 岛国视频一区| 欧美videosex性欧美黑吊| 欧美日韩久久一区| 在线观看免费黄色网址| 久久精品国语| 欧洲视频一区二区三区| 成人性教育av免费网址| 国产视频精品自拍| 久久不卡免费视频| a级精品国产片在线观看| 成年人网站国产| 在线视频亚洲欧美中文| 蜜臀久久99精品久久久久久宅男| 91在线公开视频| 久久久久久亚洲综合影院红桃| r级无码视频在线观看| 伊人精品综合| 97碰在线观看| 美丽的姑娘在线观看免费动漫| 精品高清美女精品国产区| 亚洲少妇18p| 99热这里只有精品8| 国产亚洲一区在线播放| 国产传媒在线观看| 精品调教chinesegay| 99超碰在线观看| 国产日本亚洲高清| 日本a√在线观看| 久久一本综合| 91久久精品国产91久久性色| 国产区在线观看| 欧美成人激情免费网| 日韩免费一级片| 久久久久久久久久久久久夜| 亚洲欧美另类动漫| 国产精品99久久久久久动医院| 91久久国产精品| 日韩另类在线| 日韩精品中文字幕在线| 超碰在线免费97| 中文字幕一区二区三区av| 少妇欧美激情一区二区三区| 黄色亚洲在线| 免费av在线一区二区| a屁视频一区二区三区四区| zzijzzij亚洲日本成熟少妇| a在线观看视频| 欧美性xxxxxx| 欧美视频一区二区在线| 国产激情一区二区三区四区| 99视频在线免费播放| 凹凸成人精品亚洲精品密奴| 成人午夜激情免费视频| 2020日本在线视频中文字幕| 亚洲人成在线观| 国产男女无套免费网站| 亚洲成人动漫av| 日本成人免费在线观看| 东方aⅴ免费观看久久av| 久久精品视频91| 在线电影一区二区| 欧美精品尤物在线| 日韩精品亚洲专区在线观看| 国产69久久精品成人看| 国产传媒在线播放| 亚洲欧美www| 国产日韩在线观看一区| 欧美午夜xxx| 国产中文av在线| 91老司机福利 在线| 激情久久综合网| 亚洲一区欧美二区| 亚洲高潮无码久久| 欧美理论视频| 久久综合九色99| 日韩三级av高清片| 国产精品揄拍500视频| а√天堂资源官网在线资源| 日韩av网站在线观看| 国产日产亚洲精品| 人狥杂交一区欧美二区| 久久精品视频网站| 国产日本在线视频| 亚洲高清一区二| 99热这里只有精品1| 色老综合老女人久久久| 国产无套内射又大又猛又粗又爽| 国产精品美女久久久久久| jizz日本免费| 成人午夜av影视| 国产不卡的av| 久久99九九99精品| 嫩草av久久伊人妇女超级a| 一区久久精品| 激情六月天婷婷| 欧美a级片一区| 日韩不卡一二区| 日韩电影在线视频| 奇米888一区二区三区| 日韩美女精品| 久久er99热精品一区二区三区| 欧美影院在线| 亚洲最大av在线| 国产高清亚洲| 91精品久久久久久| 国产一区二区色噜噜| 国产精品日韩电影| 日本成人伦理电影| 国产99视频精品免视看7| 少妇视频一区| 456亚洲影院| 麻豆网站免费在线观看| 国语自产精品视频在线看一大j8| 欧美大片黄色| 午夜精品久久久久久久99热| www视频在线观看| 欧美区在线播放| 免费在线观看av电影| 欧美激情精品久久久久久| 亚洲丝袜精品| 久久久久久久一| 蜜桃av在线播放| 国产91精品最新在线播放| 在线看的毛片| 国产91九色视频| 久久久久伊人| 91色琪琪电影亚洲精品久久| 国产精品亚洲四区在线观看| 亚洲综合一区二区不卡| 成人直播在线观看| 久久久婷婷一区二区三区不卡| 婷婷激情久久| 日本中文不卡| 日韩精品水蜜桃| 91九色国产ts另类人妖| 精品电影一区| 韩国一区二区av| 另类小说综合欧美亚洲| 污免费在线观看| 白白色 亚洲乱淫| xxxxx在线观看| 亚洲欧美偷拍三级| 国产精品二区一区二区aⅴ| 日韩欧美中文字幕在线观看| 成年人视频免费| 91精品国产91久久综合桃花| 亚洲精品成av人片天堂无码| 亚洲国产精品va在线观看黑人| 蜜芽tv福利在线视频| 精品国内产的精品视频在线观看| 免费不卡av| 国产精品夫妻激情| 久久99精品久久久野外观看| 国产精品免费一区二区三区四区| 自拍亚洲一区| 懂色av粉嫩av蜜臀av| 国产婷婷精品| 超碰人人草人人| av不卡一区二区三区| 91视频免费在观看| 亚洲国产一二三| 在线观看xxxx| 亚洲国产免费av| av在线导航| 国产精品第2页| 久久悠悠精品综合网| 日韩一二三区不卡在线视频| 欧美日韩视频| 久久久国产欧美| av一区二区不卡| 国产精品嫩草影院俄罗斯| 狠狠干狠狠久久| 精品久久国产视频| 在线观看中文字幕亚洲| www.8ⅹ8ⅹ羞羞漫画在线看| 国产欧美日韩综合精品| 视频小说一区二区| www.国产二区| 精品一区二区三区免费播放| 国产美女精品久久| 亚洲国产成人porn| 91久久精品国产91性色69 | 少妇性bbb搡bbb爽爽爽欧美| 久久亚洲精品一区二区| 成人国产精品入口免费视频| 久久国产精品久久精品国产| 综合激情一区| 中日韩av在线播放| 国产欧美日韩精品a在线观看| 在线免费观看毛片| 日韩亚洲欧美在线| 人人干在线视频| 国产精品久久久久久久久久久久| 久9re热视频这里只有精品| 91精品国产毛片武则天| 蜜桃精品在线观看| 潮喷失禁大喷水aⅴ无码| 一本色道久久综合狠狠躁的推荐| 精品免费久久久| 精品久久久91| 人人精品久久| 这里只有精品66| 久久国产精品一区二区| 中文字幕第20页| 色成年激情久久综合| 偷拍自拍在线| 4p变态网欧美系列| 亚洲涩涩av| 国产成人无码av在线播放dvd| 成人高清在线视频| 国产第100页| 亚洲第一色在线| av免费不卡| 精品一区二区久久久久久久网站| 在线欧美不卡| 四虎成人免费视频| 亚洲成av人片一区二区三区| 亚洲国产精品一| 亚洲18私人小影院| 国产主播性色av福利精品一区| 99在线精品免费视频 | 国产免费无遮挡吸奶头视频| 色婷婷综合久久久中文一区二区| 免费av在线电影| 国产女精品视频网站免费| 999久久久精品国产| 污免费在线观看| 亚洲午夜视频在线| 天堂中文资源在线观看| 欧美孕妇与黑人孕交| 国产探花在线精品| 57pao国产成永久免费视频| 亚洲免费观看高清完整| 蜜臀久久精品久久久久| 2018国产精品视频| 全球成人免费直播| 中文字幕avav| 欧美日韩亚洲视频| 午夜小视频在线| av激情久久| 国产精品一级| 天天做夜夜爱爱爱| 亚洲第一精品夜夜躁人人躁| 大胆人体一区| www亚洲国产| 99久久精品免费看国产| 波多野结衣黄色| 欧美精品日韩三级| 亚洲自拍都市欧美小说| 色免费在线视频| 亚洲国产精品久久久男人的天堂| 天天操天天干天天舔| 国产精品美女久久久免费| 99热精品久久| 国产熟女高潮一区二区三区| 欧美性生活影院| 精灵使的剑舞无删减版在线观看| 免费看成人午夜电影| 国产一区二区伦理片| 日韩在线视频免费播放| 日韩午夜在线视频| 久久夜色电影| 热久久久久久久久| 一本色道久久加勒比精品| 在线观看a级片| 日韩久久精品一区二区三区| 国产成人亚洲精品狼色在线| 国产免费一级视频| 欧美裸体xxxx极品少妇| 深爱激情综合网| 日韩成人av一区二区| 91精品视频网|