日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

面試中要注意的 3 個 JavaScript 問題

瀏覽:19日期:2023-11-14 17:03:27

面試中要注意的 3 個 JavaScript 問題

JavaScript 是 所有現代瀏覽器 的官方語言。因此,各種語言的開發者面試中都會遇到 JavaScript 問題。

本文不講最新的 JavaScript 庫,通用開發實踐,或任何新的 ES6 函數 。而是講講面試中經常出現的 3 個 JavaScript 問題。我問過這些問題,我的朋友說他們也問。

當然不是說你在準備 JavaScript 面試時只要學習這 3 個問題 —— 你還 有 很多 途徑 去更好的準備即將到來的面試 —— 但面試官很有可能通過下面 3 個問題來判斷你了解和掌握 JavaScript 和 DOM 的情況。

讓我們開始吧!注意下面的例子中我們使用原生 JavaScript, 因為面試官通常想考查你在不借助庫(例如 jQuery)的幫助時掌握 JavaScript 和 DOM 的情況。

問題 #1: 事件代理

創建應用時,有時需要給頁面中的按鈕,文字,或圖片添加事件監聽器,當用戶與這些元素交互時觸發某些操作。

我們以一個簡單的代辦事項列表為例,面試官會告訴你,他們希望在用戶點擊列表中某一項時觸發一個動作。并讓你用 JavaScript 根據下面的 HTML 代碼實現這個功能:

<ul id='todo-app'> <li class='item'>Walk the dog</li> <li class='item'>Pay bills</li> <li class='item'>Make dinner</li> <li class='item'>Code for one hour</li></ul>

你可能會像下面的代碼一樣給元素添加事件監聽器:

document.addEventListener(’DOMContentLoaded’, function() { let app = document.getElementById(’todo-app’); let items = app.getElementsByClassName(’item’); // 給每個列表項添加事件監聽器 for (let item of items) { item.addEventListener(’click’, function() { alert(’you clicked on item: ’ + item.innerHTML); }); }});

當然上面的代碼能完成面試官的需求,問題是每個列表項都會加上一個事件監聽器。當列表只有 4 項時沒有問題,但如果有人給代辦事項列表新增了 10,000 個事項呢(他們也許有一大堆事情要做)?那時函數會創建 10,000 個事件監聽器,然后把它們都添加到 DOM 上。這樣 效率 非常低。

面試中最好首先問一下面試官用戶最多可以添加多少個代辦事項。如果永遠不會超過 10 個,那上面的代碼運行起來就沒有問題。但如果用戶輸入待辦事項的數量沒有上限,那你就得換一個更高效的解決方案。

如果應用有上百個事件監聽器,更高效的解決方案是給最外層的容器添加 一個 事件監聽器,當用戶真正點擊的時候再去獲取實際被點擊的代辦事項。這被稱為 事件代理 ,這比給每個代辦事項都單獨添加事件監聽器更高效。

下面是事件代理的代碼:

document.addEventListener(’DOMContentLoaded’, function() { let app = document.getElementById(’todo-app’); // 給容器添加事件監聽器 app.addEventListener(’click’, function(e) { if (e.target && e.target.nodeName === ’LI’) { let item = e.target; alert(’you clicked on item: ’ + item.innerHTML); } });}); 問題 #2: 在循環中使用閉包

面試中經常會問到閉包,因為面試官能通過這個問題的回答判斷你對語言的熟悉程度,以及考察你是否知道什么時候使用閉包。

閉包就是能訪問作用域外部變量的 內部函數 。閉包能用來實現 私有化 和創建 工廠函數 等作用。關于閉包的常見面試題是這樣的:

寫一個函數,循環一個整數數組,延遲 3 秒打印這個數組中每個元素的索引。

這個問題常見(不正確)的實現是這樣:

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

如果你運行這段函數,你會發現 3 秒之后每次都打印的是 4 ,而不是預期的 0, 1, 2, 3

為了正確的找到出現這種情況的原因,你需要理解 JavaScript 是如何運行這段代碼的,這也是面試官想要考察你的地方。

原因是 setTimeout 函數創建了一個訪問外部作用域的函數(閉包),就是包含索引 i 的那個循環。3 秒之后,函數開始執行打印 i 的值,而此時循環也結束了, i 的值已經是 4。因為循環遍歷 0, 1, 2, 3, 4 后最終停在了 4。

實際上有 好幾種方法 能 正確 解決這個問題。這里有兩個:

const arr = [10, 12, 15, 21];for (var i = 0; i < arr.length; i++) { // 給每個函數傳入變量 i 讓其能訪問正確的索引 setTimeout(function(i_local) { return function() { console.log(’The index of this number is: ’ + i_local); } }(i), 3000);}

const arr = [10, 12, 15, 21];for (let i = 0; i < arr.length; i++) { // 使用 ES6 中的 let 關鍵字,它會在函數調用時創建一個新的綁定 // 了解更多:http://exploringjs.com/es6/ch_variables.html#sec_let-const-loop-heads setTimeout(function() { console.log(’The index of this number is: ’ + i); }, 3000);} 問題 #3: Debouncing(防抖動)

有些瀏覽器事件能在很短的時間內被觸發多次,例如調整窗口大小或滾動頁面。如果你給窗口滾動事件添加一個事件監聽器,然后用戶不停地快速向下滾動頁面,那你的事件可能在 3 秒之內被觸發數千次。這會導致非常嚴重的性能問題。

如果在面試中討論到構建應用程序,以及滾動事件,窗口調整事件,或者鍵盤事件等,請務必提及 debouncing 或者 throttling,作為提高頁面速度與性能的方法。來一個 css-tricks 的實例:

2011 年,Twitter 出了一個問題:當滾動 Twitter 摘要時,頁面變的很卡甚至無響應。John Resig 寫了 一篇關于這個問題的博客 ,解釋了直接將耗時的函數綁定在 scroll 事件上是一個多么糟糕的想法。

Debouncing 是解決這個問題的一種方法,它的做法是限制下次函數調用之前必須等待的時間間隔。正確實現 debouncing 的方法是將若干個函數調用 合成 一次,并在給定時間過去之后僅被調用一次。下面是一個原生 JavaScript 的實現,用到了 作用域 , 閉包, this , 和 計時事件 :

// 將會包裝事件的 debounce 函數function debounce(fn, delay) { // 維護一個 timer let timer = null; // 能訪問 timer 的閉包 return function() { // 通過 ‘this’ 和 ‘arguments’ 獲取函數的作用域和變量 let context = this; let args = arguments; // 如果事件被調用,清除 timer 然后重新設置 timer clearTimeout(timer); timer = setTimeout(function() { fn.apply(context, args); }, delay); }}

這個函數 — 當傳入一個事件(fn)時 — 會在經過給定的時間(delay)后執行。

函數這樣用:

// 當用戶滾動時被調用的函數function foo() { console.log(’You are scrolling!’);}// 在 debounce 中包裝我們的函數,過 2 秒觸發一次let elem = document.getElementById(’container’);elem.addEventListener(’scroll’, debounce(foo, 2000));

Throttling 是與 debouncing 類似的一種技術,但它不是在調用函數之前等待一段時間,throttling 是在較長的時間間隔內調用函數。所以如果一個事件每 100 毫秒被觸發 10 次,throttling 會在每隔 2 秒時執行一次這個函數,而不是在 100 毫秒內執行 10 次事件。

來自:http://www.zcfy.cc/article/3-javascript-questions-to-watch-out-for-during-coding-interviews-2537.html

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
成人精品视频| 伊人久久视频| 国产欧美日韩精品一区二区三区| 日韩成人在线看| 老司机免费视频一区二区| 青青青免费在线视频| 亚洲一级特黄| 亚洲精品少妇| 麻豆精品蜜桃视频网站| 久久久久国产一区二区| 中文字幕日韩欧美精品高清在线| 国产精品一区二区三区www| 日本免费一区二区三区四区| 先锋影音久久久| 日韩不卡一区二区三区| 精品国产91| 亚洲精品888| 欧美亚洲三级| 99久久九九| 日韩av影院| 成人欧美一区二区三区的电影| 亚洲欧美不卡| 美女视频黄免费的久久| 国产一区观看| 国产欧美日韩免费观看| 亚洲性色av| 日本va欧美va精品| 日韩精品一卡| 日韩久久一区| 欧美日韩免费看片| 日韩三级精品| 99久精品视频在线观看视频| 日韩二区三区四区| 国精品一区二区| 国产伦理久久久久久妇女| 欧美成人基地| 国产一级成人av| 一区二区小说| 国产精品成人**免费视频| 在线视频亚洲| 国产一区二区三区探花| 亚洲小说春色综合另类电影| 日韩精品中文字幕第1页| 日韩一区二区三区免费视频 | 在线综合欧美| 黄色欧美在线| 日韩中文字幕无砖| 欧美日韩一二三四| 国产精品黄色| 国产手机视频一区二区| 中文在线免费视频| 久久精品99久久久| 亚洲精品1区| 在线中文字幕播放| 国产精品任我爽爆在线播放 | 久热综合在线亚洲精品| 亚洲黄色免费看| 欧美日韩视频免费看| 狠狠久久婷婷| 日韩av片子| 国产精品任我爽爆在线播放| 天堂va蜜桃一区二区三区| 成人小电影网站| 久久gogo国模啪啪裸体| 美国三级日本三级久久99| 久久国产影院| 精品国产a一区二区三区v免费| 日本不卡在线视频| 国产一区二区精品| 久久久成人网| 国产精品成人a在线观看| 国产欧美日韩在线观看视频 | 日本不卡高清视频| 老鸭窝毛片一区二区三区| 久久久久蜜桃| 吉吉日韩欧美| 精品亚洲免a| 欧美精品中文| 日韩精品一区二区三区中文字幕| 亚洲欧美视频一区二区三区| 成人免费网站www网站高清| 成人午夜毛片| 精品欧美日韩精品| 麻豆精品久久| 欧美a级一区二区| 国产精品超碰| 国产精品免费精品自在线观看| 日韩av一区二区在线影视| 日韩在线观看一区二区三区| 亚洲一区二区三区久久久| 模特精品在线| 石原莉奈在线亚洲三区| 久久国产福利| 免费在线观看视频一区| 最新日韩欧美| 女人天堂亚洲aⅴ在线观看| 亚洲福利一区| 亚洲v在线看| 日本欧美不卡| 久久国产直播| 九一精品国产| 欧美在线影院| 久久xxxx| 免费高清在线一区| 午夜在线视频一区二区区别| 美美哒免费高清在线观看视频一区二区| 国产精品人人爽人人做我的可爱| 亚洲精品1区2区| 中文字幕免费一区二区| 日本午夜精品久久久久| 91成人福利| 久久国产视频网| 美女久久久久久| 亚洲综合在线电影| 欧洲激情综合| 亚洲理论在线| 欧美欧美黄在线二区| 捆绑调教美女网站视频一区| 国产欧美一区二区三区精品酒店| 国产精品久久久久av电视剧| 伊人精品一区| 日韩在线观看一区二区| 日韩美女精品| 丁香婷婷久久| 欧美日韩在线网站| 99re国产精品| 日韩精品a在线观看91| 国产精品色在线网站| 国产高清不卡| 亚洲一区国产| 国产亚洲电影| 日韩综合精品| 免费人成精品欧美精品| 国产精品亚洲产品| av在线日韩| 亚洲制服欧美另类| 久久精品九色| 欧美网站在线| 91精品国产自产精品男人的天堂 | 香蕉久久久久久| 精品国产aⅴ| 亚洲女同中文字幕| 欧美日韩一区二区国产| 亚洲三级欧美| 丝袜美腿成人在线| 国产精品videossex久久发布 | 精品国产黄a∨片高清在线| 欧美不卡高清| 欧美视频久久| 久久久久久久久99精品大| 蜜臀a∨国产成人精品| 国产精品国码视频| 2023国产精品久久久精品双| 日韩视频一二区| 高清av不卡| 日韩欧美中文字幕电影| 成人精品国产亚洲| 亚洲人亚洲人色久| 丝袜诱惑一区二区| 日韩中出av| 亚洲成人一区在线观看| 日韩亚洲精品在线观看| 日韩欧美一区二区三区在线视频| 喷白浆一区二区| 精品理论电影在线| 最新亚洲激情| 精品国产日韩欧美精品国产欧美日韩一区二区三区| 国产一区日韩欧美| 久久不见久久见免费视频7| 在线综合视频| 色婷婷亚洲mv天堂mv在影片| 亚洲精品韩国| 久久久一二三| 国产精品探花在线观看| 黄色亚洲在线| 色爱综合网欧美| 日本不卡一二三区黄网| 欧美日韩一区二区三区视频播放| 国产精品美女午夜爽爽| 亚洲一区日韩| 日韩av专区| 91精品国产经典在线观看| 欧美日韩少妇| 黄毛片在线观看| 国产日韩一区| 亚洲精选av| 一本色道久久精品| 成人亚洲欧美| 国产精品视频一区二区三区四蜜臂| 亚洲精品91| 国产精品专区免费| 久久爱www.| 日韩精品亚洲专区| 国产精品毛片| 99精品小视频| 国产91在线播放精品| 久久激情av| 亚洲精品四区| 国产精品老牛| 亚洲网站视频|