精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

性欧美视频videos6一9| 精品久久久久久亚洲综合网| 婷婷四月色综合| 国产免费无遮挡| 激情欧美国产欧美| 亚洲欧美自拍一区| www,av在线| 中文字幕成在线观看| 中文字幕中文字幕一区二区| 国产激情一区二区三区在线观看 | 国产精品欧美久久久久一区二区| 成人国产在线激情| 亚洲欧美一区二区三区在线观看| 99久久精品费精品国产风间由美| 亚洲第一中文字幕| 日韩精品你懂的| 国产在线精彩视频| 国产精品久久久久国产精品日日| 国产伦精品一区二区三区免| 一区二区三区黄| 午夜在线视频观看日韩17c| 久久伊人91精品综合网站| 在线精品一区二区三区| 国模大尺度视频一区二区| 色一区在线观看| 欧美亚洲黄色片| 黄页视频在线播放| 国产精品美女www爽爽爽| 久久五月天婷婷| 亚洲av无码一区二区三区性色| 蜜臀va亚洲va欧美va天堂| 午夜精品久久久久久99热| 国产又粗又硬又长又爽| 日韩av免费大片| 亚洲免费成人av电影| 韩国三级hd两男一女| 欧美久久亚洲| 91精品中文字幕一区二区三区| 国产淫片av片久久久久久| av资源网在线播放| 亚洲va韩国va欧美va精品| 国产精品久久成人免费观看| 欧美猛烈性xbxbxbxb| 国产色91在线| 日韩精品极品视频在线观看免费| 日本国产在线| 久久婷婷成人综合色| 久精品国产欧美| 五十路在线视频| gogo大胆日本视频一区| 国产私拍一区| 色窝窝无码一区二区三区成人网站 | 91蜜桃在线观看| 国外成人在线视频网站| 色窝窝无码一区二区三区成人网站| 成人福利在线看| 国产精品国产一区二区| 色丁香婷婷综合久久| 99九九99九九九视频精品| 狼狼综合久久久久综合网| 色中色在线视频| 日本一区二区三区国色天香| 亚洲精品无人区| 国产1区在线| 一区二区三区视频在线观看| av无码久久久久久不卡网站| 台湾佬中文娱乐网欧美电影| 91极品美女在线| 艹b视频在线观看| 精品国产不卡一区二区| 精品成人一区二区三区四区| 噜噜噜在线视频| 国产在线观看91一区二区三区| 亚洲人成电影在线| 国产一区二区三区视频播放| 午夜天堂精品久久久久| 韩国三级日本三级少妇99| 成人免费毛片视频| 久草热8精品视频在线观看| 91视频网页| 视频国产一区二区三区| 欧美激情一区二区三区四区| 潘金莲一级淫片aaaaa免费看| 制服丝袜中文字幕在线| 婷婷久久综合九色综合绿巨人 | 国产精品第二十页| 可以看av的网站久久看| 91欧美激情另类亚洲| 亚洲av综合色区无码一二三区| 91在线国内视频| 日本一区免费看| 最新国产在线拍揄自揄视频| 精品久久中文字幕久久av| 日本激情综合网| 国产精品久av福利在线观看| 尤物tv国产一区| 久久精品国产亚洲AV无码麻豆| 母乳一区在线观看| 1卡2卡3卡精品视频| 欧美成人免费| 一区二区三区不卡在线观看| 爱情岛论坛vip永久入口| 在线综合色站| 日韩中文字幕在线看| 日本一级黄色大片| 国产一区二区三区观看| 欧美日韩精品中文字幕一区二区| 羞羞视频在线观看不卡| 欧洲生活片亚洲生活在线观看| 成人三级做爰av| 色婷婷色综合| 日本一欧美一欧美一亚洲视频| 不卡视频在线播放| 国产精品毛片a∨一区二区三区| 波多野结衣av一区二区全免费观看| 99久久亚洲国产日韩美女| 亚洲风情亚aⅴ在线发布| 免费高清在线观看电视| 日韩在线播放一区二区| 麻豆av一区| 久久99亚洲网美利坚合众国| 欧美精品乱码久久久久久按摩| 爱爱免费小视频| 亚洲乱码视频| 高清不卡日本v二区在线| 精品麻豆一区二区三区| 欧美日韩夫妻久久| 亚洲天堂岛国片| 久久久久欧美精品| 久久资源亚洲| 欧美xxxhd| 欧美精品一区二区久久婷婷| 国产成人无码aa精品一区| 麻豆一区二区三| 手机成人在线| 欧美123区| 一区二区三区久久精品| 精品一区二区无码| 国产欧美日本一区视频| www.天天射.com| 国产影视一区| 国产精品美女999| 福利视频在线导航| 欧美性大战久久久久久久蜜臀| 免费看黄色aaaaaa 片| 亚洲欧美日韩一区在线观看| 久久综合九色欧美狠狠| 亚洲优女在线| 一区二区三区日韩在线| 中文字幕 国产| 国产精品黄色在线观看| 一级片黄色免费| 欧美在线影院| 国产精品免费一区二区三区四区 | 成人a级免费视频| 国产黄色在线免费观看| 国产欧美综合精品一区二区| 国产99re66在线视频| 欧美一级久久久| 日本黄色小说视频| 国产成人h网站| 精品国产一区二区三区无码| 午夜日韩影院| 久久在线精品| 奇米影视首页 狠狠色丁香婷婷久久综合 | 国产日韩在线观看一区| 亚洲精品午夜久久久| 亚洲综合中文网| 99精品热6080yy久久| 欧美日韩亚洲一区二区三区四区| 亚洲人免费短视频| www.亚洲免费视频| 亚洲精品一区二区三区新线路| 精品欧美激情精品一区| 成年人在线免费看片| 韩国av一区二区三区四区| 97超碰在线人人| 国产精品探花在线观看| 成人午夜激情网| 成年女人在线看片| 综合av色偷偷网| www.欧美国产| 色国产精品一区在线观看| 国产一二三区精品| 97se亚洲国产综合自在线 | 国产成人在线视频网站| 欧美视频在线播放一区| 99精品网站| 久久人人爽爽人人爽人人片av| 视频精品导航| 欧美国产日韩中文字幕在线| 国产小视频在线观看| 日韩一区和二区| 成人免费毛片男人用品| 一区二区免费在线| 手机看片日韩av| av亚洲精华国产精华精| 天堂在线中文在线| 香蕉久久夜色精品国产| 国内外成人激情免费视频| 午夜欧洲一区| 成人自拍视频网站| 国产毛片精品久久| 91国产精品电影| 18视频在线观看| 中日韩美女免费视频网址在线观看 | 欧美专区一二三| 成人h动漫精品一区二区器材| 国产精品电影网| sm久久捆绑调教精品一区| www高清在线视频日韩欧美| 色呦呦中文字幕| 777奇米成人网| 国产一级精品毛片| 欧美三级xxx| 国产在线免费视频| 日韩美女视频一区二区 | 国产精品扒开腿做| 欧美少妇网站| 97国产在线观看| 男女视频在线| 欧美成人午夜免费视在线看片 | 一区二区三区四区在线看| 成人在线看片| 精品国产亚洲日本| 国产综合香蕉五月婷在线| 电影亚洲一区| 国产精品91久久久| 毛片无码国产| 日本国产一区二区三区| 三级在线观看视频| 97精品久久久中文字幕免费| 日本在线视频中文有码| 欧美成人在线免费| 26uuu亚洲电影在线观看| 久久这里有精品视频| 麻豆tv免费在线观看| 色噜噜久久综合伊人一本| 国产福利电影在线| 国产亚洲欧美日韩精品| 国产毛片av在线| 亚洲性无码av在线| av男人的天堂在线| 色婷婷综合久久久久中文字幕1| 91在线高清| www.日韩免费| h片在线免费观看| 欧美激情xxxxx| av毛片午夜不卡高**水| 91高清视频免费观看| 日韩免费va| 国产精品久久中文| 91精品麻豆| 不卡一区二区三区四区五区| 高清一区二区三区| 免费毛片一区二区三区久久久| 免费看成人哺乳视频网站| 日韩中文一区| 亚洲综合自拍| 国产欧美日韩小视频| 亚洲专区欧美专区| 美女喷白浆视频| 国产麻豆精品theporn| 插我舔内射18免费视频| 91麻豆高清视频| 一区二区三区在线观看免费视频| 国产精品久久久久婷婷| 欧美精品一区二区成人| 欧美性xxxxx极品| 中文字幕乱码视频| 日韩午夜精品视频| 青青草免费在线| 日韩在线观看免费av| 日本色护士高潮视频在线观看| 97视频在线看| 欧美成a人片免费观看久久五月天| 国产在线一区二区三区| 国产精品chinese在线观看| 日本一区二区在线视频观看| 欧美暴力喷水在线| 成人黄色一区二区| 老司机精品视频一区二区三区| 中文字幕avav| 久久精品视频在线看| 99自拍视频在线| 欧美小视频在线| 国产99对白在线播放| 亚洲女人天堂av| 日韩另类在线| 国产剧情久久久久久| 精品久久ai| 伊人久久大香线蕉成人综合网| 影音先锋亚洲一区| 久久这里只精品| eeuss鲁片一区二区三区在线观看| 免费一级特黄3大片视频| 亚洲自拍另类综合| 中文字幕一区二区人妻痴汉电车| 精品欧美一区二区在线观看| 99reav在线| 欧美一级在线亚洲天堂| 日韩精品亚洲专区在线观看| 日韩wuma| 国产精品日韩| 不许穿内裤随时挨c调教h苏绵 | 亚洲精品美女久久| yellow91字幕网在线| 国产精品com| 欧美丝袜足交| 男人添女荫道口喷水视频| 久久超级碰视频| av永久免费观看| 欧美性生交大片免网| 欧美 中文字幕| 欧美成人全部免费| 先锋影音一区二区| 日韩国产伦理| 久久亚洲色图| 人人妻人人澡人人爽人人精品| 亚洲最新视频在线观看| 国产精品视频无码| 综合久久五月天| 精品国产欧美日韩一区二区三区| 久久久久一区二区| 亚洲黄页一区| 四虎永久免费观看| 一区二区三区91| 精品国产18久久久久久| 久久久精品日本| japansex久久高清精品| 在线看视频不卡| 久久精品国产一区二区三| 色欲狠狠躁天天躁无码中文字幕| 狠狠躁夜夜躁人人爽天天天天97| 免费观看黄色一级视频| 久久久久中文字幕| 精品视频自拍| 久久久999免费视频| 波多野洁衣一区| av中文在线播放| 日韩www在线| 中文字幕在线官网| 日产中文字幕在线精品一区| 日产国产欧美视频一区精品| 免费看污片的网站| 欧美午夜在线一二页| 香港伦理在线| 亚洲a成v人在线观看| 亚洲欧美综合久久久| 中国老熟女重囗味hdxx| 亚洲一卡二卡三卡四卡| 日韩中文字幕免费观看| 2019中文字幕在线免费观看| 一道本一区二区三区| 激情五月亚洲色图| 国产精品久久久久久久久快鸭| 国产又粗又大又黄| 欧美黑人性视频| 日韩a级大片| 日韩亚洲在线视频| 国产精品久久久久一区| 超碰福利在线观看| 51精品在线观看| 国产亚洲一区| 久久久九九九热| 午夜欧美一区二区三区在线播放| 日韩福利一区二区| 国产精品手机播放| 欧美日一区二区在线观看 | 婷婷在线免费观看| 国产成人精品视频| 亚洲成av人片乱码色午夜| 亚洲精品无码一区二区| 欧美午夜宅男影院在线观看| 欧美猛烈性xbxbxbxb| 国产免费一区| 欧美aaaaa成人免费观看视频| www.超碰在线观看| 亚洲欧美日韩国产成人| 亚洲精品伦理| 久久久久久久午夜| 国产精品电影院| 婷婷丁香花五月天| 91丝袜美腿美女视频网站| 亚洲精品一级| 国产传媒免费在线观看| 亚洲国产精品热久久| 日本a人精品| 国产精品沙发午睡系列| 亚洲三级在线免费观看| 可以直接在线观看的av| 99精彩视频在线观看免费| 久久九九国产| 国产精品 欧美 日韩| 日韩一区二区三区国产| 中文有码一区| 色哟哟无码精品一区二区三区| 欧美在线一区二区| 日本乱码一区二区三区不卡| 性生活免费观看视频|