成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

最近遇到的前端面試題(2017.03.08更新版)

linkFly / 2084人閱讀

摘要:通過(guò)管理組件通信通過(guò)驅(qū)動(dòng)視圖比較差異進(jìn)行更新操作作者第七頁(yè)鏈接來(lái)源知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。達(dá)到無(wú)刷新的效果。對(duì)象的狀態(tài)不受外界影響。對(duì)象代表一個(gè)異步操作,有三種狀態(tài)進(jìn)行中已完成,又稱和已失敗。

以下問(wèn)題解釋非本人原創(chuàng),是根據(jù)面試經(jīng)驗(yàn)整理后覺(jué)得更容易理解的解釋版本,歡迎補(bǔ)充。

一. 輸入url后的加載過(guò)程

從輸入 URL 到頁(yè)面加載完成的過(guò)程中都發(fā)生了什么

計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)

應(yīng)用層(HTTP、SMTP、FTP、POP3)

運(yùn)輸層(TCP、UDP)

網(wǎng)絡(luò)層(IP(路由器))

數(shù)據(jù)鏈路層(網(wǎng)橋(CSMA/CD、PPP))

物理層(集線器)

1. 查找域名對(duì)應(yīng)IP地址

這一步包括 DNS 具體的查找過(guò)程,包括:瀏覽器緩存->系統(tǒng)緩存->路由器緩存...
(1) 瀏覽器搜索自己的 DNS 緩存(維護(hù)一張域名與 IP 地址的對(duì)應(yīng)表);
(2) 搜索操作系統(tǒng)中的 DNS 緩存(維護(hù)一張域名與 IP 地址的對(duì)應(yīng)表);
(3) 搜索操作系統(tǒng)的 hosts 文件( Windows 環(huán)境下,維護(hù)一張域名與 IP 地址的對(duì)應(yīng)表);
(4) 操作系統(tǒng)將域名發(fā)送至 LDNS(本地區(qū)域名服務(wù)器),LDNS 查詢 自己的 DNS 緩存(一般查找成功率在 80% 左右),查找成功則返回結(jié)果,失敗則發(fā)起一個(gè)迭代 DNS 解析請(qǐng)求

① LDNS 向 Root Name Server (根域名服務(wù)器,如 com、net、org等的解析的頂級(jí)域名服務(wù)器的地址)發(fā)起請(qǐng)求,此處,Root Name Server 返回 com 域的頂級(jí)域名服務(wù)器的地址;

② LDNS 向 com 域的頂級(jí)域名服務(wù)器發(fā)起請(qǐng)求,返回 baidu.com 域名服務(wù)器地址;

③ LDNS 向 baidu.com 域名服務(wù)器發(fā)起請(qǐng)求,得到 www.baidu.com 的 IP 地址;

(5) LDNS 將得到的 IP 地址返回給操作系統(tǒng),同時(shí)自己也將 IP 地址緩存起來(lái);

(6) 操作系統(tǒng)將 IP 地址返回給瀏覽器,同時(shí)自己也將 IP 地址緩存起來(lái);

2. 建立連接(TCP的三次握手)

(1) 主機(jī)向服務(wù)器發(fā)送一個(gè)建立連接的請(qǐng)求;

(2) 服務(wù)器接到請(qǐng)求后發(fā)送同意連接的信號(hào);

(3) 主機(jī)接到同意連接的信號(hào)后,再次向服務(wù)器發(fā)送了確認(rèn)信號(hào) ;

注意:這里的三次握手中主機(jī)兩次向服務(wù)器發(fā)送確認(rèn),第二次是為了防止已失效的連接請(qǐng)求報(bào)文段傳至服務(wù)器導(dǎo)致錯(cuò)誤。

3. 構(gòu)建網(wǎng)頁(yè)

(1) 瀏覽器根據(jù) URL 內(nèi)容生成 HTTP 請(qǐng)求,請(qǐng)求中包含請(qǐng)求文件的位置、請(qǐng)求文件的方式等等;

(2) 服務(wù)器接到請(qǐng)求后,會(huì)根據(jù) HTTP 請(qǐng)求中的內(nèi)容來(lái)決定如何獲取相應(yīng)的 HTML 文件;

(3) 服務(wù)器將得到的 HTML 文件發(fā)送給瀏覽器;

(4) 在瀏覽器還沒(méi)有完全接收 HTML 文件時(shí)便開(kāi)始渲染、顯示網(wǎng)頁(yè);

(5) 在執(zhí)行 HTML 中代碼時(shí),根據(jù)需要,瀏覽器會(huì)繼續(xù)請(qǐng)求圖片、音頻、視頻、CSS、JS等文件,過(guò)程同請(qǐng)求 HTML ;

瀏覽器渲染展示網(wǎng)頁(yè)過(guò)程

HTML代碼轉(zhuǎn)化為DOM(DOM Tree)

CSS代碼轉(zhuǎn)化成CSSOM(CSS Object Model)

結(jié)合DOM和CSSOM,生成一棵渲染樹(shù)(包含每個(gè)節(jié)點(diǎn)的視覺(jué)信息)(Render Tree)

生成布局(layout),即將所有渲染樹(shù)的所有節(jié)點(diǎn)進(jìn)行平面合成

將布局繪制(paint)在屏幕上

4. 斷開(kāi)連接(TCP的四次揮手)

(1) 主機(jī)向服務(wù)器發(fā)送一個(gè)斷開(kāi)連接的請(qǐng)求;

(2) 服務(wù)器接到請(qǐng)求后發(fā)送確認(rèn)收到請(qǐng)求的信號(hào);(此時(shí)服務(wù)器可能還有數(shù)據(jù)要發(fā)送至主機(jī))

(3) 服務(wù)器向主機(jī)發(fā)送斷開(kāi)通知;(此時(shí)服務(wù)器確認(rèn)沒(méi)有要向主機(jī)發(fā)送的數(shù)據(jù))

(4) 主機(jī)接到斷開(kāi)通知后斷開(kāi)連接并反饋一個(gè)確認(rèn)信號(hào),服務(wù)器收到確認(rèn)信號(hào)后斷開(kāi)連接;

注意:這里的四次揮手中服務(wù)器兩次向主機(jī)發(fā)送消息,第一次是回復(fù)主機(jī)已收到斷開(kāi)的請(qǐng)求,第二次是向主機(jī)確認(rèn)是否斷開(kāi),確保數(shù)據(jù)傳輸完畢。

三次握手 && 四次揮手

二. 有了解過(guò)Common.js嗎?

發(fā)現(xiàn)這方面的資料很少啊,都沒(méi)有相中的比較好理解的。

淺析JS中的模塊規(guī)范(CommonJS,AMD,CMD)

前端模塊化(CommonJs,AMD和CMD)

前端模塊化

前端模塊化 三. 有了解過(guò)React.js嗎?

React.js 只是一個(gè)視圖庫(kù)

 ?。?)聲明式設(shè)計(jì)

 ?。?)高效:通過(guò)對(duì)DOM的模擬,最大限度的減少與DOM的交互。

 ?。?)靈活:可以與已知的框架或庫(kù)很好的配合。

 ?。?)JSX:是js語(yǔ)法的擴(kuò)展,不一定使用,但建議用。

  (5)組件:構(gòu)建組件,使代碼更容易得到復(fù)用,能夠很好地應(yīng)用在大項(xiàng)目的開(kāi)發(fā)中。

  (6)單向響應(yīng)的數(shù)據(jù)流:React實(shí)現(xiàn)了單向響應(yīng)的數(shù)據(jù)流,從而減少了重復(fù)代碼,這也是解釋了它為什么比傳統(tǒng)數(shù)據(jù)綁定更簡(jiǎn)單。

react 通過(guò)prop管理組件通信,通過(guò)state 驅(qū)動(dòng)視圖比較差異進(jìn)行更新操作

作者:第七頁(yè)
鏈接:https://www.zhihu.com/question/39825457/answer/83544390
來(lái)源:知乎
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。

*angular 是MV 框架, react是用來(lái)構(gòu)建可重復(fù)使用的UI組件的, 可以看成是個(gè)提供工具的library。
react 可以和 angular 的 directive做比較。 這樣比較的話, react是比angular directive 在組建UI上更powerful的。**

作者:空空
鏈接:https://www.zhihu.com/question/23444167/answer/24957302
來(lái)源:知乎
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。

React.js 初學(xué)者應(yīng)該知道的 9 件事

React之特點(diǎn)及常見(jiàn)用法

React 入門(mén)實(shí)例教程

請(qǐng)問(wèn) React 和 Angular 各有什么優(yōu)缺點(diǎn),各自又適合什么開(kāi)發(fā)場(chǎng)景?

四. angular和vue的區(qū)別

唉,這個(gè)真的太難總結(jié)了,求評(píng)論!?。?/strong>

Vue擁有類(lèi)似 Angular 的雙向數(shù)據(jù)綁定,以及類(lèi)似 React 的虛擬DOM。

angular && vue && react

Vue.js 很好,但會(huì)比 Angular 或 React 更好嗎?

vue.js與angular,react等框架分析比較

淺析angular,react,vue.js jQuery使用區(qū)別

*

五. less的特點(diǎn)

每次被問(wèn)到這個(gè)我只能想起less中的定義變量,用太久less都忘了css不能嵌套,醉了醉了。

變量

混合(Mixins)

嵌套規(guī)則

運(yùn)算

函數(shù)

命名空間

作用域

注釋

導(dǎo)入(Import)

Less語(yǔ)言特性

sass-vs-less

Sass和Less的區(qū)別

sass 與 less 的區(qū)別與學(xué)習(xí)

六. less的原理

本質(zhì)上,less 包含一套自定義的語(yǔ)法及一個(gè)解析器,用戶根據(jù)這些語(yǔ)法定義自己的樣式規(guī)則,這些規(guī)則最終會(huì)通過(guò)解析器,less 把這些樣式規(guī)則編譯成瀏覽器可以識(shí)別的 css 樣式。less 并沒(méi)有裁剪 css 原有的特性,更不是用來(lái)取代 css 的,而是在現(xiàn)有 css 語(yǔ)法的基礎(chǔ)上,為 css 加入程序式語(yǔ)言的特性。less 最終需要編譯成 css 文件才能起到樣式的效果,我們可以稱 less 為 css 樣式生成工具。

七. gulp的特點(diǎn)

使用 gulp.js,你的構(gòu)建腳本是代碼,而不是配置文件;

使用標(biāo)準(zhǔn)庫(kù)(node.js standard library)來(lái)編寫(xiě)腳本;

插件都很簡(jiǎn)單,只負(fù)責(zé)完成一件事-基本上都是 20 行左右的函數(shù);

任務(wù)都以最大的并發(fā)數(shù)來(lái)執(zhí)行;

Gulp是一個(gè)基于流的構(gòu)建系統(tǒng),使用代碼優(yōu)于配置的策略。輸入/輸出(I/O)是基于“流式”的。

作用

Sass、Less編譯

Css Js 圖片壓縮

Css Js 合并

Css Js 內(nèi)聯(lián)

Html的include功能

Autoprefixer(自動(dòng)處理瀏覽器css前綴)

自動(dòng)刷新

去緩存

Handlebars模板文件的預(yù)編譯

雪碧圖

ESLint

rem移動(dòng)端適配方案

其他補(bǔ)充
gulp grunt
速度
格式 和node差不多 json套json
操作基于 二進(jìn)制流 文件

gulp VS grunt

前端工程的構(gòu)建工具對(duì)比 Gulp vs Grunt

模塊化 && 構(gòu)建

dist是指distribution——分配,分發(fā)——發(fā)布完成的文件夾一般命名dist。

dest則是destination——目的地,終點(diǎn)——用于grunt文件路徑相關(guān)的配置項(xiàng),一般會(huì)和src配對(duì)出現(xiàn)。比如文件壓縮插件:壓縮源(src)文件,生成壓縮包到(dest)。

作者:峰子
鏈接:https://www.zhihu.com/question/29199796/answer/82862432
來(lái)源:知乎
著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。

常規(guī)GruntFile.js && gulpFile.js

GruntFile.js

gulpfile.js

*

八. ajax的原理

在舊的交互方式中,由用戶觸發(fā)一個(gè)HTTP請(qǐng)求到服務(wù)器,服務(wù)器對(duì)其進(jìn)行處理后再返回一個(gè)新的HTHL頁(yè)到客戶端, 每當(dāng)服務(wù)器處理客戶端提交的請(qǐng)求時(shí),客戶都只能空閑等待,并且哪怕只是一次很小的交互、只需從服務(wù)器端得到很簡(jiǎn)單的一個(gè)數(shù)據(jù),都要返回一個(gè)完整的HTML頁(yè),而用戶每次都要浪費(fèi)時(shí)間和帶寬去重新讀取整個(gè)頁(yè)面。而使用Ajax后用戶從感覺(jué)上幾乎所有的操作都會(huì)很快響應(yīng)沒(méi)有頁(yè)面重載(白屏)的等待。

Ajax的原理簡(jiǎn)單來(lái)說(shuō)是在用戶和服務(wù)器之間加了—個(gè)中間層(AJAX引擎),通過(guò)XmlHttpRequest對(duì)象來(lái)向服務(wù)器發(fā)異步請(qǐng)求,從服務(wù)器獲得數(shù)據(jù),然后用javascript來(lái)操作DOM而更新頁(yè)面。使用戶操作與服務(wù)器響應(yīng)異步化。這其中最關(guān)鍵的一步就是從服務(wù)器獲得請(qǐng)求數(shù)據(jù)。

Ajax的過(guò)程只涉及JavaScript、XMLHttpRequest和DOM。XMLHttpRequest是ajax的核心機(jī)制,它是在IE5中首先引入的,是一種支持異步請(qǐng)求的技術(shù)。簡(jiǎn)單的說(shuō),也就是javascript可以及時(shí)向服務(wù)器提出請(qǐng)求和處理響應(yīng),而不阻塞用戶。達(dá)到無(wú)刷新的效果。

每天10個(gè)前端知識(shí)點(diǎn):ajax && jsonp

ajax過(guò)程

獲得ajax

打開(kāi)地址

發(fā)送數(shù)據(jù)

接收數(shù)據(jù)

*

九. 有了解過(guò)ES6嗎?

哈哈,這個(gè)后面會(huì)寫(xiě)一整篇,敬請(qǐng)期待!

【探秘ES6】系列專(zhuān)欄(一):ES6簡(jiǎn)介

十. git merge

git merge 和 git rebase 小結(jié)

十一. less不依靠構(gòu)建轉(zhuǎn)css

我猜這道面試題應(yīng)該也不讓用 lessc ,哈哈哈!

依舊求評(píng)論,我只會(huì)lessc和構(gòu)建轉(zhuǎn)化誒。

甩上gulp構(gòu)建轉(zhuǎn)化

十二. 冒泡、快排

這個(gè)后面也有一篇簡(jiǎn)單的算法篇,敬請(qǐng)期待!

冒泡排序

每次比較相鄰的兩個(gè)數(shù),如果后一個(gè)比前一個(gè)小,換位置。
時(shí)間復(fù)雜度:O(n^2)

快速排序

采用二分法,取出中間數(shù),數(shù)組每次和中間數(shù)比較,小的放到左邊,大的放到右邊。
時(shí)間復(fù)雜度:O(nlog2(n))

十三. promise

Promise對(duì)象有以下兩個(gè)特點(diǎn)。

對(duì)象的狀態(tài)不受外界影響。Promise對(duì)象代表一個(gè)異步操作,有三種狀態(tài):Pending(進(jìn)行中)、Resolved(已完成,又稱 Fulfilled)和Rejected(已失?。V挥挟惒讲僮鞯慕Y(jié)果,可以決定當(dāng)前是哪一種狀態(tài),任何其他操作都無(wú)法改變這個(gè)狀態(tài)。這也是Promise這個(gè)名字的由來(lái),它的英語(yǔ)意思就是“承諾”,表示其他手段無(wú)法改變。

一旦狀態(tài)改變,就不會(huì)再變,任何時(shí)候都可以得到這個(gè)結(jié)果。Promise對(duì)象的狀態(tài)改變,只有兩種可能:從Pending變?yōu)?b>Resolved和從Pending變?yōu)?b>Rejected。只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會(huì)再變了,會(huì)一直保持這個(gè)結(jié)果。就算改變已經(jīng)發(fā)生了,你再對(duì)Promise對(duì)象添加回調(diào)函數(shù),也會(huì)立即得到這個(gè)結(jié)果。這與事件(Event)完全不同,事件的特點(diǎn)是,如果你錯(cuò)過(guò)了它,再去監(jiān)聽(tīng),是得不到結(jié)果的。

ECMAScript 6入門(mén) - Promise對(duì)象

十四. 性能優(yōu)化

詳見(jiàn)性能優(yōu)化篇!

每天10個(gè)前端知識(shí)點(diǎn):性能優(yōu)化篇 - 簡(jiǎn)書(shū)

十五. js的冒泡(Bubbling Event)和捕獲(Capture Event)的區(qū)別

js之事件冒泡和事件捕獲詳細(xì)介紹

冒泡型事件:事件按照從最特定的事件目標(biāo)到最不特定的事件目標(biāo)(document對(duì)象)的順序觸發(fā)。

捕獲型事件(event capturing):事件從最不精確的對(duì)象(document 對(duì)象)開(kāi)始觸發(fā),然后到最精確(也可以在窗口級(jí)別捕獲事件,不過(guò)必須由開(kāi)發(fā)人員特別指定)。

DOM事件流:同時(shí)支持兩種事件模型:捕獲型事件和冒泡型事件,但是,捕獲型事件先發(fā)生。兩種事件流會(huì)觸及DOM中的所有對(duì)象,從document對(duì)象開(kāi)始,也在document對(duì)象結(jié)束。

DOM事件模型最獨(dú)特的性質(zhì)是,文本節(jié)點(diǎn)也觸發(fā)事件(在IE中不會(huì))。

示例
假設(shè)一個(gè)元素div,它有一個(gè)下級(jí)元素p。

  

元素

這兩個(gè)元素都綁定了click事件,如果用戶點(diǎn)擊了p:

事件捕獲

當(dāng)你使用事件捕獲時(shí),**父級(jí)元素先觸發(fā)**,子級(jí)元素后觸發(fā),即div先觸發(fā),p后觸發(fā)。

事件冒泡

當(dāng)你使用事件冒泡時(shí),**子級(jí)元素先觸發(fā)**,父級(jí)元素后觸發(fā),即p先觸發(fā),div后觸發(fā)。

addEventListener函數(shù),它有三個(gè)參數(shù),第三個(gè)參數(shù)若是true,則表示采用事件捕獲,若是false,則表示采用事件冒泡。
IE只支持事件冒泡,不支持事件捕獲。

Paste_Image.png

阻止冒泡

? 在W3c中,使用stopPropagation()方法
? 在IE下設(shè)置oEvent.cancelBubble = true;

在捕獲的過(guò)程中stopPropagation()后,后面的冒泡過(guò)程也不會(huì)發(fā)生了。

阻止捕獲

阻止事件的默認(rèn)行為,例如click 后的跳轉(zhuǎn)
? 在W3c中,使用oEvent.preventDefault()方法;
? 在IE下設(shè)置window.event.returnValue = false;

十六. 數(shù)組的翻轉(zhuǎn)(非reverse)

數(shù)組更多應(yīng)用詳見(jiàn):每天10個(gè)前端知識(shí)點(diǎn):數(shù)組應(yīng)用篇

十七. js的Object和其他語(yǔ)言的object的區(qū)別

js對(duì)象的創(chuàng)建 js對(duì)象和java對(duì)象的不同

面向?qū)ο蠓譃榛谠偷拿嫦驅(qū)ο蠛突谀0宓拿嫦驅(qū)ο蟆?/p>

Java:基于模板的面向?qū)ο蟆?/p>

class A
{
   private String name;
   public void fun(){

   }
}

A a = new A();
a.fun();

JavaScript:基于原型的面向?qū)ο?,基于事件的網(wǎng)頁(yè)腳本語(yǔ)言。

十八. js的Element和Node的區(qū)別

JavaScript中Element與Node的區(qū)別,children與childNodes的區(qū)別

Element繼承了Node類(lèi),也就是說(shuō)Element是Node多種類(lèi)型中的一種。

children是Element的屬性,childNodes是Node的屬性

HTML中的Node和Element的區(qū)別

NODE是相對(duì)TREE這種數(shù)據(jù)結(jié)構(gòu)而言的。TREE就是由NODE組成。

node有幾個(gè)**子類(lèi)型**:**Element**,Text,,Attribute,RootElement,Comment,Namespace等。

ELEMENT則是HTML里的概念,是元素即標(biāo)簽包含內(nèi)部屬性及內(nèi)容的總體,是HTML中的數(shù)據(jù)的組成部分之一。

*

十九. svn與git的區(qū)別

git是分布式的,svn不是。

git跟svn一樣有自己的集中式版本庫(kù)或服務(wù)器。但git更傾向于被使用于分布式模式,克隆版本庫(kù)后即使沒(méi)有網(wǎng)絡(luò)也能夠commit文件,查看歷史版本記錄,創(chuàng)建項(xiàng)目分支等,等網(wǎng)絡(luò)再次連接上Push到服務(wù)器端。

git把內(nèi)容按元數(shù)據(jù)方式存儲(chǔ),而svn是按文件。

所有的資源控制系統(tǒng)都是把文件的元信息隱藏在一個(gè)類(lèi)似.svn,.cvs等的文件夾里。
git目錄是處于你的機(jī)器上的一個(gè)克隆版的版本庫(kù),它擁有中心版本庫(kù)上所有的東西,例如標(biāo)簽,分支,版本記錄等。

git沒(méi)有一個(gè)全局的版本號(hào),svn有。

git的內(nèi)容完整性優(yōu)于svn。

因?yàn)間it的內(nèi)容存儲(chǔ)使用的是SHA-1哈希算法。

git可以有無(wú)限個(gè)版本庫(kù),svn只能有一個(gè)指定中央版本庫(kù)。

當(dāng)svn中央版本庫(kù)有問(wèn)題時(shí),所有工作成員都一起癱瘓直到版本庫(kù)維修完畢或者新的版本庫(kù)設(shè)立完成。
每一個(gè)git都是一個(gè)版本庫(kù),區(qū)別是它們是否擁有活躍目錄(Git Working Tree)。如果主要版本庫(kù)(例如:置於GitHub的版本庫(kù))有問(wèn)題,工作成員仍然可以在自己的本地版本庫(kù)(local repository)提交,等待主要版本庫(kù)恢復(fù)即可。工作成員也可以提交到其他的版本庫(kù)!

二十. 定時(shí)器

這是一道筆試題,小白就是小白啊,還第一次見(jiàn)到定時(shí)器的第三個(gè)參數(shù),還是這么寫(xiě)的。

你應(yīng)該知道的setTimeout秘密

↑ 上面這篇文章值得耐心細(xì)看,對(duì)理解定時(shí)器有很大幫助。

首先我們要了解之前提到的定時(shí)器,setTimeout(fn, 0)輸出時(shí)間并不為0且大于0。

這是因?yàn)?JavaScript是單線程執(zhí)行的。也就是說(shuō),在任何時(shí)間點(diǎn),有且只有一個(gè)線程在運(yùn)行JavaScript程序,無(wú)法同一時(shí)候運(yùn)行多段代碼。

瀏覽器的內(nèi)核是多線程的,它們?cè)趦?nèi)核控制下相互配合以保持同步,一個(gè)瀏覽器至少實(shí)現(xiàn)三個(gè)常駐線程:JavaScript引擎線程,GUI渲染線程,瀏覽器事件觸發(fā)線程。

JavaScript引擎是基于事件驅(qū)動(dòng)單線程執(zhí)行的,JavaScript引擎一直等待著任務(wù)隊(duì)列中任務(wù)的到來(lái),然后加以處理,瀏覽器無(wú)論什么時(shí)候都只有一個(gè)JavaScript線程在運(yùn)行JavaScript程序。

GUI渲染線程負(fù)責(zé)渲染瀏覽器界面,當(dāng)界面需要重繪(Repaint)或由于某種操作引發(fā)回流(Reflow)時(shí),該線程就會(huì)執(zhí)行。但需要注意,GUI渲染線程與JavaScript引擎是互斥的,當(dāng)JavaScript引擎執(zhí)行時(shí)GUI線程會(huì)被掛起,GUI更新會(huì)被保存在一個(gè)隊(duì)列中等到JavaScript引擎空閑時(shí)立即被執(zhí)行。

事件觸發(fā)線程,當(dāng)一個(gè)事件被觸發(fā)時(shí),該線程會(huì)把事件添加到待處理隊(duì)列的隊(duì)尾,等待JavaScript引擎的處理。這些事件可來(lái)自JavaScript引擎當(dāng)前執(zhí)行的代碼塊如setTimeout、也可來(lái)自瀏覽器內(nèi)核的其他線程如鼠標(biāo)點(diǎn)擊、Ajax異步請(qǐng)求等,但由于JavaScript的單線程關(guān)系,所有這些事件都得排隊(duì)等待JavaScript引擎處理(當(dāng)線程中沒(méi)有執(zhí)行任何同步代碼的前提下才會(huì)執(zhí)行異步代碼)。

以下為這次遇見(jiàn)的題目

廣義上我們遇到定時(shí)器的題目一般是這樣的

setTimeout

這次遇見(jiàn)的是這樣的:

循環(huán)只進(jìn)行兩次

關(guān)于定時(shí)器.png

幾個(gè)讓我印象深刻的面試題(一) | Jay Zangwill

請(qǐng)注意:這個(gè)t是定義在閉包外面的,也就是說(shuō)t并沒(méi)有被閉包保存,所以這里的t指的是最后一個(gè)循環(huán)留下來(lái)的t,所以最后一個(gè)3被清除了,沒(méi)有輸出。

setTimeout可以傳入第三個(gè)參數(shù)、第四個(gè)參數(shù)...,用來(lái)表示第一個(gè)參數(shù)(回調(diào)函數(shù))傳入的參數(shù)。

于是我檢測(cè)了以下變形

循環(huán)只進(jìn)行兩次

循環(huán)只進(jìn)行兩次

t為非 2 / 3 時(shí),循環(huán)輸出3次

setInterval

這次遇見(jiàn)的長(zhǎng)這樣:

幾個(gè)讓我印象深刻的面試題(一) | Jay Zangwill

第一次觸發(fā)回調(diào)函數(shù)執(zhí)行的時(shí)候 t 的值是undefined,第二次觸發(fā)的時(shí)候有值了。這和程序的執(zhí)行順序有關(guān)。我們知道js正常情況下是從上到下,從右到左執(zhí)行的。
所以這里每次循環(huán)先設(shè)置定時(shí)器,然后把定時(shí)器的返回值賦值給t。在第一次循環(huán)的時(shí)候t并沒(méi)有被賦值,所以是undefined,在第二次循環(huán)的時(shí)候,定時(shí)器其實(shí)清理的是上一個(gè)循環(huán)的定時(shí)器。所以導(dǎo)致每次循環(huán)都是清理上一次的定時(shí)器,而最后一次循環(huán)的定時(shí)器沒(méi)被清理,導(dǎo)致一直輸出3。

于是我做了以下測(cè)試

轉(zhuǎn)載:http://www.jianshu.com/p/3944...

個(gè)人建了前端學(xué)習(xí)群,旨在一起學(xué)習(xí)前端。純凈、純粹技術(shù)討論,非前端人員勿擾!入群加我微信:iamaixiaoxiao。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/86887.html

相關(guān)文章

  • 最近遇到前端面試(2017.03.08新版)

    摘要:通過(guò)管理組件通信通過(guò)驅(qū)動(dòng)視圖比較差異進(jìn)行更新操作作者第七頁(yè)鏈接來(lái)源知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。達(dá)到無(wú)刷新的效果。對(duì)象的狀態(tài)不受外界影響。對(duì)象代表一個(gè)異步操作,有三種狀態(tài)進(jìn)行中已完成,又稱和已失敗。 以下問(wèn)題解釋非本人原創(chuàng),是根據(jù)面試經(jīng)驗(yàn)整理后覺(jué)得更容易理解的解釋版本,歡迎補(bǔ)充。 一. 輸入url后的加載過(guò)程 從輸入 URL 到頁(yè)面加載完成的過(guò)程中都發(fā)生了什么 計(jì)算機(jī)...

    Nosee 評(píng)論0 收藏0
  • 最近遇到前端面試(2017.03.08新版)

    摘要:通過(guò)管理組件通信通過(guò)驅(qū)動(dòng)視圖比較差異進(jìn)行更新操作作者第七頁(yè)鏈接來(lái)源知乎著作權(quán)歸作者所有,轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán)。達(dá)到無(wú)刷新的效果。對(duì)象的狀態(tài)不受外界影響。對(duì)象代表一個(gè)異步操作,有三種狀態(tài)進(jìn)行中已完成,又稱和已失敗。 以下問(wèn)題解釋非本人原創(chuàng),是根據(jù)面試經(jīng)驗(yàn)整理后覺(jué)得更容易理解的解釋版本,歡迎補(bǔ)充。 一. 輸入url后的加載過(guò)程 從輸入 URL 到頁(yè)面加載完成的過(guò)程中都發(fā)生了什么 計(jì)算機(jī)...

    劉東 評(píng)論0 收藏0
  • 深入理解js

    摘要:詳解十大常用設(shè)計(jì)模式力薦深度好文深入理解大設(shè)計(jì)模式收集各種疑難雜癥的問(wèn)題集錦關(guān)于,工作和學(xué)習(xí)過(guò)程中遇到過(guò)許多問(wèn)題,也解答過(guò)許多別人的問(wèn)題。介紹了的內(nèi)存管理。 延遲加載 (Lazyload) 三種實(shí)現(xiàn)方式 延遲加載也稱為惰性加載,即在長(zhǎng)網(wǎng)頁(yè)中延遲加載圖像。用戶滾動(dòng)到它們之前,視口外的圖像不會(huì)加載。本文詳細(xì)介紹了三種延遲加載的實(shí)現(xiàn)方式。 詳解 Javascript十大常用設(shè)計(jì)模式 力薦~ ...

    caikeal 評(píng)論0 收藏0
  • HTML-CSS

    摘要:但是,從字體上來(lái)說(shuō)雪碧圖制作,使用以及相關(guān),圖文。由于采用了編譯,所以能夠保證在瀏覽器不支持標(biāo)準(zhǔn)布局的情況下,回滾到舊版本的,保證移動(dòng)設(shè)備中能呈現(xiàn)出一樣的布局效果。我不想陷入和的紛爭(zhēng),但是有一件事是確定的極大的提升了移動(dòng)端 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個(gè)問(wèn)題:怎樣通過(guò) CSS 簡(jiǎn)單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中。記得剛開(kāi)始學(xué)習(xí) CSS 的時(shí)候,看到 ...

    xiaokai 評(píng)論0 收藏0
  • HTML-CSS

    摘要:但是,從字體上來(lái)說(shuō)雪碧圖制作,使用以及相關(guān),圖文。由于采用了編譯,所以能夠保證在瀏覽器不支持標(biāo)準(zhǔn)布局的情況下,回滾到舊版本的,保證移動(dòng)設(shè)備中能呈現(xiàn)出一樣的布局效果。我不想陷入和的紛爭(zhēng),但是有一件事是確定的極大的提升了移動(dòng)端 一勞永逸的搞定 flex 布局 尋根溯源話布局 一切都始于這樣一個(gè)問(wèn)題:怎樣通過(guò) CSS 簡(jiǎn)單而優(yōu)雅的實(shí)現(xiàn)水平、垂直同時(shí)居中。記得剛開(kāi)始學(xué)習(xí) CSS 的時(shí)候,看到 ...

    CHENGKANG 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<