QA-QA1[轉(zhuǎn)載]

轉(zhuǎn)載

前端開(kāi)發(fā)面試題

<a name='preface'>前言</a>

本文由我收集總結(jié)了一些前端面試題,初學(xué)者閱后也要用心鉆研其中的原理殖蚕,重要知識(shí)需要系統(tǒng)學(xué)習(xí)、透徹學(xué)習(xí),形成自己的知識(shí)鏈磅叛。萬(wàn)不可投機(jī)取巧,臨時(shí)抱佛腳只求面試僥幸混過(guò)關(guān)是錯(cuò)誤的萨赁!也是不可能的弊琴!不可能的!不可能的杖爽!

前端還是一個(gè)年輕的行業(yè)敲董,新的行業(yè)標(biāo)準(zhǔn), 框架慰安, 庫(kù)都不斷在更新和新增腋寨,正如赫門(mén)在2015深JS大會(huì)上的《前端服務(wù)化之路》主題演講中說(shuō)的一句話:“每18至24個(gè)月,前端都會(huì)難一倍”化焕,這些變化使前端的能力更加豐富萄窜、創(chuàng)造的應(yīng)用也會(huì)更加完美。所以關(guān)注各種前端技術(shù),跟上快速變化的節(jié)奏查刻,也是身為一個(gè)前端程序員必備的技能之一番宁。

最近也收到許多微博私信的鼓勵(lì)和更正題目信息,后面會(huì)經(jīng)常更新題目和答案到github博客赖阻。希望前端er達(dá)到既能使用也會(huì)表達(dá)蝶押,對(duì)理論知識(shí)有自己的理解』鹋罚可根據(jù)下面的知識(shí)點(diǎn)一個(gè)一個(gè)去進(jìn)階學(xué)習(xí)棋电,形成自己的職業(yè)技能鏈。

面試有幾點(diǎn)需注意:(來(lái)源寒冬winter 老師苇侵,github:@wintercn)

  1. 面試題目: 根據(jù)你的等級(jí)和職位的變化赶盔,入門(mén)級(jí)到專家級(jí),廣度和深度都會(huì)有所增加榆浓。

  2. 題目類型: 理論知識(shí)于未、算法、項(xiàng)目細(xì)節(jié)陡鹃、技術(shù)視野烘浦、開(kāi)放性題、工作案例萍鲸。

  3. 細(xì)節(jié)追問(wèn): 可以確保問(wèn)到你開(kāi)始不懂或面試官開(kāi)始不懂為止闷叉,這樣可以大大延展題目的區(qū)分度和深度,知道你的實(shí)際能力脊阴。因?yàn)檫@種知識(shí)關(guān)聯(lián)是長(zhǎng)時(shí)期的學(xué)習(xí)握侧,臨時(shí)抱佛腳絕對(duì)是記不住的。

  4. 回答問(wèn)題再棒嘿期,面試官(可能是你面試職位的直接領(lǐng)導(dǎo))品擎,會(huì)考慮我要不要這個(gè)人做我的同事?所以態(tài)度很重要备徐、除了能做事萄传,還要會(huì)做人。(感覺(jué)更像是相親( ????????????????? ))

  5. 資深的前端開(kāi)發(fā)能把a(bǔ)bsolute和relative弄混坦喘,這樣的人不要也罷逆皮,因?yàn)閳F(tuán)隊(duì)需要的是:你這個(gè)人具有可以依靠的才能(靠譜)绰精。

前端開(kāi)發(fā)知識(shí)點(diǎn):

HTML&CSS:
    對(duì)Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異碗旅、兼容性贷揽、hack棠笑、CSS基本功:布局、盒子模型禽绪、選擇器優(yōu)先級(jí)蓖救、
    HTML5洪规、CSS3、Flexbox

JavaScript:
    數(shù)據(jù)類型循捺、運(yùn)算斩例、對(duì)象、Function从橘、繼承念赶、閉包、作用域恰力、原型鏈叉谜、事件、RegExp踩萎、JSON停局、Ajax、
    DOM香府、BOM董栽、內(nèi)存泄漏、跨域企孩、異步裝載裆泳、模板引擎、前端MVC柠硕、路由工禾、模塊化、Canvas蝗柔、ECMAScript 6闻葵、Nodejs

其他:
    移動(dòng)端、響應(yīng)式癣丧、自動(dòng)化構(gòu)建槽畔、HTTP、離線存儲(chǔ)胁编、WEB安全厢钧、優(yōu)化、重構(gòu)嬉橙、團(tuán)隊(duì)協(xié)作早直、可維護(hù)、易用性市框、SEO霞扬、UED、架構(gòu)、職業(yè)生涯喻圃、快速學(xué)習(xí)能力

作為一名前端工程師萤彩,無(wú)論工作年頭長(zhǎng)短都應(yīng)該掌握的知識(shí)點(diǎn)

此條由 王子墨 發(fā)表在 攻城師的實(shí)驗(yàn)室

    1、DOM結(jié)構(gòu) —— 兩個(gè)節(jié)點(diǎn)之間可能存在哪些關(guān)系以及如何在節(jié)點(diǎn)之間任意移動(dòng)斧拍。

    2雀扶、DOM操作 —— 如何添加、移除肆汹、移動(dòng)愚墓、復(fù)制、創(chuàng)建和查找節(jié)點(diǎn)等县踢。

    3转绷、事件 —— 如何使用事件,以及IE和標(biāo)準(zhǔn)DOM事件模型之間存在的差別硼啤。

    4议经、XMLHttpRequest —— 這是什么、怎樣完整地執(zhí)行一次GET請(qǐng)求谴返、怎樣檢測(cè)錯(cuò)誤煞肾。

    5、嚴(yán)格模式與混雜模式 —— 如何觸發(fā)這兩種模式嗓袱,區(qū)分它們有何意義籍救。

    6、盒模型 —— 外邊距渠抹、內(nèi)邊距和邊框之間的關(guān)系蝙昙,及IE8以下版本的瀏覽器中的盒模型

    7、塊級(jí)元素與行內(nèi)元素 —— 怎么用CSS控制它們梧却、以及如何合理的使用它們

    8奇颠、浮動(dòng)元素 —— 怎么使用它們、它們有什么問(wèn)題以及怎么解決這些問(wèn)題放航。

    9烈拒、HTML與XHTML —— 二者有什么區(qū)別,你覺(jué)得應(yīng)該使用哪一個(gè)并說(shuō)出理由广鳍。

    10荆几、JSON —— 作用、用途赊时、設(shè)計(jì)結(jié)構(gòu)吨铸。

備注:

根據(jù)自己需要選擇性閱讀,面試題是對(duì)理論知識(shí)的總結(jié)蛋叼,讓自己學(xué)會(huì)應(yīng)該如何表達(dá)焊傅。

資料答案不夠正確和全面剂陡,歡迎歡迎Star和提交issues狈涮。

格式不斷修改更新中狐胎。

更新記錄:
2016年3月25日:新增ECMAScript6 相關(guān)問(wèn)題

更新時(shí)間: 2016-3-25

<a name='html'>HTML</a>

  • Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別?

      (1)歌馍、<!DOCTYPE>聲明位于位于HTML文檔中的第一行握巢,處于 <html> 標(biāo)簽之前。告知瀏覽器的解析器用什么文檔標(biāo)準(zhǔn)解析這個(gè)文檔松却。DOCTYPE不存在或格式不正確會(huì)導(dǎo)致文檔以兼容模式呈現(xiàn)暴浦。
    
      (2)、標(biāo)準(zhǔn)模式的排版 和JS運(yùn)作模式都是以該瀏覽器支持的最高標(biāo)準(zhǔn)運(yùn)行晓锻。在兼容模式中歌焦,頁(yè)面以寬松的向后兼容的方式顯示,模擬老式瀏覽器的行為以防止站點(diǎn)無(wú)法工作。
    
  • HTML5 為什么只需要寫(xiě) <!DOCTYPE HTML>砚哆?

       HTML5 不基于 SGML独撇,因此不需要對(duì)DTD進(jìn)行引用,但是需要doctype來(lái)規(guī)范瀏覽器的行為(讓瀏覽器按照它們應(yīng)該的方式來(lái)運(yùn)行)躁锁;
    
       而HTML4.01基于SGML,所以需要對(duì)DTD進(jìn)行引用纷铣,才能告知瀏覽器文檔所使用的文檔類型。
    
  • 行內(nèi)元素有哪些战转?塊級(jí)元素有哪些搜立? 空(void)元素有那些?

      首先:CSS規(guī)范規(guī)定槐秧,每個(gè)元素都有display屬性啄踊,確定該元素的類型,每個(gè)元素都有默認(rèn)的display值刁标,如div的display默認(rèn)值為“block”颠通,則為“塊級(jí)”元素;span默認(rèn)display屬性值為“inline”命雀,是“行內(nèi)”元素蒜哀。
    
      (1)行內(nèi)元素有:a b span img input select strong(強(qiáng)調(diào)的語(yǔ)氣)
      (2)塊級(jí)元素有:div ul ol li dl dt dd h1 h2 h3 h4…p
    
      (3)常見(jiàn)的空元素:
          <br> <hr> <img> <input> <link> <meta>
          鮮為人知的是:
          <area> <base> <col> <command> <embed> <keygen> <param> <source> <track> <wbr>
    
  • 頁(yè)面導(dǎo)入樣式時(shí),使用link和@import有什么區(qū)別吏砂?

    (1)link屬于XHTML標(biāo)簽撵儿,除了加載CSS外,還能用于定義RSS, 定義rel連接屬性等作用狐血;而@import是CSS提供的淀歇,只能用于加載CSS;

    (2)頁(yè)面被加載的時(shí),link會(huì)同時(shí)被加載匈织,而@import引用的CSS會(huì)等到頁(yè)面被加載完再加載;

    (3)import是CSS2.1 提出的浪默,只在IE5以上才能被識(shí)別牡直,而link是XHTML標(biāo)簽,無(wú)兼容問(wèn)題;
  • 介紹一下你對(duì)瀏覽器內(nèi)核的理解纳决?

      主要分成兩部分:渲染引擎(layout engineer或Rendering Engine)和JS引擎碰逸。
      渲染引擎:負(fù)責(zé)取得網(wǎng)頁(yè)的內(nèi)容(HTML、XML阔加、圖像等等)饵史、整理訊息(例如加入CSS等),以及計(jì)算網(wǎng)頁(yè)的顯示方式胜榔,然后會(huì)輸出至顯示器或打印機(jī)胳喷。瀏覽器的內(nèi)核的不同對(duì)于網(wǎng)頁(yè)的語(yǔ)法解釋會(huì)有不同,所以渲染的效果也不相同夭织。所有網(wǎng)頁(yè)瀏覽器吭露、電子郵件客戶端以及其它需要編輯、顯示網(wǎng)絡(luò)內(nèi)容的應(yīng)用程序都需要內(nèi)核尊惰。
    
      JS引擎則:解析和執(zhí)行javascript來(lái)實(shí)現(xiàn)網(wǎng)頁(yè)的動(dòng)態(tài)效果讲竿。
    
      最開(kāi)始渲染引擎和JS引擎并沒(méi)有區(qū)分的很明確,后來(lái)JS引擎越來(lái)越獨(dú)立择浊,內(nèi)核就傾向于只指渲染引擎戴卜。
    
  • 常見(jiàn)的瀏覽器內(nèi)核有哪些?

      Trident內(nèi)核:IE,MaxThon,TT,The World,360,搜狗瀏覽器等琢岩。[又稱MSHTML]
      Gecko內(nèi)核:Netscape6及以上版本投剥,F(xiàn)F,MozillaSuite/SeaMonkey等
      Presto內(nèi)核:Opera7及以上。      [Opera內(nèi)核原為:Presto担孔,現(xiàn)為:Blink;]
      Webkit內(nèi)核:Safari,Chrome等江锨。   [ Chrome的:Blink(WebKit的分支)]
    
    詳細(xì)文章:[瀏覽器內(nèi)核的解析和對(duì)比](http://www.cnblogs.com/fullhouse/archive/2011/12/19/2293455.html)
    
  • html5有哪些新特性、移除了那些元素糕篇?如何處理HTML5新標(biāo)簽的瀏覽器兼容問(wèn)題啄育?如何區(qū)分 HTML 和
    HTML5?

    * HTML5 現(xiàn)在已經(jīng)不是 SGML 的子集拌消,主要是關(guān)于圖像挑豌,位置,存儲(chǔ)墩崩,多任務(wù)等功能的增加氓英。
          繪畫(huà) canvas;
          用于媒介回放的 video 和 audio 元素;
          本地離線存儲(chǔ) localStorage 長(zhǎng)期存儲(chǔ)數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失;
          sessionStorage 的數(shù)據(jù)在瀏覽器關(guān)閉后自動(dòng)刪除;
          語(yǔ)意化更好的內(nèi)容元素鹦筹,比如 article铝阐、footer、header铐拐、nav徘键、section;
          表單控件练对,calendar、date吹害、time螟凭、email、url赠制、search;
          新的技術(shù)webworker, websocket, Geolocation;

      移除的元素:
          純表現(xiàn)的元素:basefont赂摆,big挟憔,center钟些,font, s,strike绊谭,tt政恍,u;
          對(duì)可用性產(chǎn)生負(fù)面影響的元素:frame,frameset达传,noframes篙耗;

    * 支持HTML5新標(biāo)簽:
         IE8/IE7/IE6支持通過(guò)document.createElement方法產(chǎn)生的標(biāo)簽,
         可以利用這一特性讓這些瀏覽器支持HTML5新標(biāo)簽宪赶,
         瀏覽器支持新標(biāo)簽后宗弯,還需要添加標(biāo)簽?zāi)J(rèn)的樣式。

         當(dāng)然也可以直接使用成熟的框架搂妻、比如html5shim;
         <!--[if lt IE 9]>
            <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script>
         <![endif]-->

    * 如何區(qū)分HTML5: DOCTYPE聲明\新增的結(jié)構(gòu)元素\功能元素
  • 簡(jiǎn)述一下你對(duì)HTML語(yǔ)義化的理解蒙保?

      用正確的標(biāo)簽做正確的事情。
      html語(yǔ)義化讓頁(yè)面的內(nèi)容結(jié)構(gòu)化欲主,結(jié)構(gòu)更清晰邓厕,便于對(duì)瀏覽器、搜索引擎解析;
      即使在沒(méi)有樣式CSS情況下也以一種文檔格式顯示扁瓢,并且是容易閱讀的;
      搜索引擎的爬蟲(chóng)也依賴于HTML標(biāo)記來(lái)確定上下文和各個(gè)關(guān)鍵字的權(quán)重详恼,利于SEO;
      使閱讀源代碼的人對(duì)網(wǎng)站更容易將網(wǎng)站分塊,便于閱讀維護(hù)理解引几。
    
  • HTML5的離線儲(chǔ)存怎么使用昧互,工作原理能不能解釋一下?

      在用戶沒(méi)有與因特網(wǎng)連接時(shí)伟桅,可以正常訪問(wèn)站點(diǎn)或應(yīng)用敞掘,在用戶與因特網(wǎng)連接時(shí),更新用戶機(jī)器上的緩存文件贿讹。
      原理:HTML5的離線存儲(chǔ)是基于一個(gè)新建的.appcache文件的緩存機(jī)制(不是存儲(chǔ)技術(shù))渐逃,通過(guò)這個(gè)文件上的解析清單離線存儲(chǔ)資源,這些資源就會(huì)像cookie一樣被存儲(chǔ)了下來(lái)民褂。之后當(dāng)網(wǎng)絡(luò)在處于離線狀態(tài)下時(shí)茄菊,瀏覽器會(huì)通過(guò)被離線存儲(chǔ)的數(shù)據(jù)進(jìn)行頁(yè)面展示疯潭。
    
    
      如何使用:
      1、頁(yè)面頭部像下面一樣加入一個(gè)manifest的屬性面殖;
      2竖哩、在cache.manifest文件的編寫(xiě)離線存儲(chǔ)的資源;
          CACHE MANIFEST
          #v0.11
          CACHE:
          js/app.js
          css/style.css
          NETWORK:
          resourse/logo.png
          FALLBACK:
          / /offline.html
      3脊僚、在離線狀態(tài)時(shí)相叁,操作window.applicationCache進(jìn)行需求實(shí)現(xiàn)。
    

    詳細(xì)的使用請(qǐng)參考:有趣的HTML5:離線存儲(chǔ)

  • 瀏覽器是怎么對(duì)HTML5的離線儲(chǔ)存資源進(jìn)行管理和加載的呢辽幌?

      在線的情況下增淹,瀏覽器發(fā)現(xiàn)html頭部有manifest屬性,它會(huì)請(qǐng)求manifest文件乌企,如果是第一次訪問(wèn)app虑润,那么瀏覽器就會(huì)根據(jù)manifest文件的內(nèi)容下載相應(yīng)的資源并且進(jìn)行離線存儲(chǔ)。如果已經(jīng)訪問(wèn)過(guò)app并且資源已經(jīng)離線存儲(chǔ)了加酵,那么瀏覽器就會(huì)使用離線的資源加載頁(yè)面拳喻,然后瀏覽器會(huì)對(duì)比新的manifest文件與舊的manifest文件,如果文件沒(méi)有發(fā)生改變猪腕,就不做任何操作冗澈,如果文件改變了,那么就會(huì)重新下載文件中的資源并進(jìn)行離線存儲(chǔ)陋葡。
      離線的情況下亚亲,瀏覽器就直接使用離線存儲(chǔ)的資源。
    

    詳細(xì)的使用請(qǐng)參考:有趣的HTML5:離線存儲(chǔ)

  • 請(qǐng)描述一下 cookies脖岛,sessionStorage 和 localStorage 的區(qū)別朵栖?

      cookie是網(wǎng)站為了標(biāo)示用戶身份而儲(chǔ)存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過(guò)加密)。
      cookie數(shù)據(jù)始終在同源的http請(qǐng)求中攜帶(即使不需要)柴梆,記會(huì)在瀏覽器和服務(wù)器間來(lái)回傳遞陨溅。
      sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器,僅在本地保存绍在。
    
      存儲(chǔ)大忻派取:
          cookie數(shù)據(jù)大小不能超過(guò)4k。
          sessionStorage和localStorage 雖然也有存儲(chǔ)大小的限制偿渡,但比cookie大得多臼寄,可以達(dá)到5M或更大。
    
      有期時(shí)間:
          localStorage    存儲(chǔ)持久數(shù)據(jù)溜宽,瀏覽器關(guān)閉后數(shù)據(jù)不丟失除非主動(dòng)刪除數(shù)據(jù)吉拳;
          sessionStorage  數(shù)據(jù)在當(dāng)前瀏覽器窗口關(guān)閉后自動(dòng)刪除。
          cookie          設(shè)置的cookie過(guò)期時(shí)間之前一直有效适揉,即使窗口或?yàn)g覽器關(guān)閉
    
  • iframe有那些缺點(diǎn)留攒?

      *iframe會(huì)阻塞主頁(yè)面的Onload事件煤惩;
      *搜索引擎的檢索程序無(wú)法解讀這種頁(yè)面,不利于SEO;
    
      *iframe和主頁(yè)面共享連接池炼邀,而瀏覽器對(duì)相同域的連接有限制魄揉,所以會(huì)影響頁(yè)面的并行加載。
    
      使用iframe之前需要考慮這兩個(gè)缺點(diǎn)拭宁。如果需要使用iframe洛退,最好是通過(guò)javascript
      動(dòng)態(tài)給iframe添加src屬性值,這樣可以繞開(kāi)以上兩個(gè)問(wèn)題兵怯。
    
  • Label的作用是什么?是怎么用的在旱?

      label標(biāo)簽來(lái)定義表單控制間的關(guān)系,當(dāng)用戶選擇該標(biāo)簽時(shí)摇零,瀏覽器會(huì)自動(dòng)將焦點(diǎn)轉(zhuǎn)到和標(biāo)簽相關(guān)的表單控件上。
    
      <label for="Name">Number:</label>
      <input type=“text“name="Name" id="Name"/>
    
      <label>Date:<input type="text" name="B"/></label>
    
  • HTML5的form如何關(guān)閉自動(dòng)完成功能桶蝎?

      給不想要提示的 form 或某個(gè) input 設(shè)置為 autocomplete=off。
    
  • 如何實(shí)現(xiàn)瀏覽器內(nèi)多個(gè)標(biāo)簽頁(yè)之間的通信? (阿里)

      WebSocket谅畅、SharedWorker登渣;
      也可以調(diào)用localstorge、cookies等本地存儲(chǔ)方式毡泻;
    
      localstorge另一個(gè)瀏覽上下文里被添加胜茧、修改或刪除時(shí),它都會(huì)觸發(fā)一個(gè)事件仇味,
      我們通過(guò)監(jiān)聽(tīng)事件呻顽,控制它的值來(lái)進(jìn)行頁(yè)面信息通信;
      注意quirks:Safari 在無(wú)痕模式下設(shè)置localstorge值時(shí)會(huì)拋出 QuotaExceededError 的異常丹墨;
    
  • webSocket如何兼容低瀏覽器廊遍?(阿里)

      Adobe Flash Socket 、
      ActiveX HTMLFile (IE) 贩挣、
      基于 multipart 編碼發(fā)送 XHR 喉前、
      基于長(zhǎng)輪詢的 XHR
    
  • 頁(yè)面可見(jiàn)性(Page Visibility API) 可以有哪些用途?

      通過(guò) visibilityState 的值檢測(cè)頁(yè)面當(dāng)前是否可見(jiàn)王财,以及打開(kāi)網(wǎng)頁(yè)的時(shí)間等;
      在頁(yè)面被切換到其他后臺(tái)進(jìn)程的時(shí)候卵迂,自動(dòng)暫停音樂(lè)或視頻的播放;
    
  • 如何在頁(yè)面上實(shí)現(xiàn)一個(gè)圓形的可點(diǎn)擊區(qū)域绒净?

      1见咒、map+area或者svg
      2、border-radius
      3挂疆、純js實(shí)現(xiàn) 需要求一個(gè)點(diǎn)在不在圓上簡(jiǎn)單算法改览、獲取鼠標(biāo)坐標(biāo)等等
    
  • 實(shí)現(xiàn)不使用 border 畫(huà)出1px高的線哎垦,在不同瀏覽器的標(biāo)準(zhǔn)模式與怪異模式下都能保持一致的效果。

      <div style="height:1px;overflow:hidden;background:red"></div>
    
  • 網(wǎng)頁(yè)驗(yàn)證碼是干嘛的恃疯,是為了解決什么安全問(wèn)題漏设。

      區(qū)分用戶是計(jì)算機(jī)還是人的公共全自動(dòng)程序〗裢可以防止惡意破解密碼郑口、刷票、論壇灌水盾鳞;
      有效防止黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試犬性。
    
  • title與h1的區(qū)別、b與strong的區(qū)別腾仅、i與em的區(qū)別乒裆?

      title屬性沒(méi)有明確意義只表示是個(gè)標(biāo)題,H1則表示層次明確的標(biāo)題推励,對(duì)頁(yè)面信息的抓取也有很大的影響鹤耍;
    
      strong是標(biāo)明重點(diǎn)內(nèi)容,有語(yǔ)氣加強(qiáng)的含義验辞,使用閱讀設(shè)備閱讀網(wǎng)絡(luò)時(shí):<strong>會(huì)重讀稿黄,而<B>是展示強(qiáng)調(diào)內(nèi)容。
    
      i內(nèi)容展示為斜體跌造,em表示強(qiáng)調(diào)的文本杆怕;
      
      Physical Style Elements -- 自然樣式標(biāo)簽
      b, i, u, s, pre
      Semantic Style Elements -- 語(yǔ)義樣式標(biāo)簽
      strong, em, ins, del, code
      應(yīng)該準(zhǔn)確使用語(yǔ)義樣式標(biāo)簽, 但不能濫用, 如果不能確定時(shí)首選使用自然樣式標(biāo)簽。
    

<a name='css'>CSS</a>

  • 介紹一下標(biāo)準(zhǔn)的CSS的盒子模型壳贪?低版本IE的盒子模型有什么不同的陵珍?

      (1)有兩種, IE 盒子模型违施、W3C 盒子模型互纯;
      (2)盒模型: 內(nèi)容(content)、填充(padding)醉拓、邊界(margin)伟姐、 邊框(border);
      (3)區(qū)  別: IE的content部分把 border 和 padding計(jì)算了進(jìn)去;
    
  • CSS選擇符有哪些亿卤?哪些屬性可以繼承愤兵?

      *   1.id選擇器( # myid)
          2.類選擇器(.myclassname)
          3.標(biāo)簽選擇器(div, h1, p)
          4.相鄰選擇器(h1 + p)
          5.子選擇器(ul > li)
          6.后代選擇器(li a)
          7.通配符選擇器( * )
          8.屬性選擇器(a[rel = "external"])
          9.偽類選擇器(a:hover, li:nth-child)
    
      *   可繼承的樣式: font-size font-family color, UL LI DL DD DT;
    
      *   不可繼承的樣式:border padding margin width height ;
    
  • CSS優(yōu)先級(jí)算法如何計(jì)算?

      *   優(yōu)先級(jí)就近原則排吴,同權(quán)重情況下樣式定義最近者為準(zhǔn);
    
      *   載入樣式以最后載入的定位為準(zhǔn);
    
      優(yōu)先級(jí)為:
         !important >  id > class > tag
          important 比 內(nèi)聯(lián)優(yōu)先級(jí)高
    
  • CSS3新增偽類有那些秆乳?

          舉例:
          p:first-of-type 選擇屬于其父元素的首個(gè) <p> 元素的每個(gè) <p> 元素。
          p:last-of-type  選擇屬于其父元素的最后 <p> 元素的每個(gè) <p> 元素。
          p:only-of-type  選擇屬于其父元素唯一的 <p> 元素的每個(gè) <p> 元素屹堰。
          p:only-child        選擇屬于其父元素的唯一子元素的每個(gè) <p> 元素肛冶。
          p:nth-child(2)  選擇屬于其父元素的第二個(gè)子元素的每個(gè) <p> 元素。
    
          :after          在元素之前添加內(nèi)容,也可以用來(lái)做清除浮動(dòng)扯键。
          :before         在元素之后添加內(nèi)容
          :enabled        
          :disabled       控制表單控件的禁用狀態(tài)睦袖。
          :checked        單選框或復(fù)選框被選中。
    
  • 如何居中div荣刑?如何居中一個(gè)浮動(dòng)元素馅笙?如何讓絕對(duì)定位的div居中?

*  給div設(shè)置一個(gè)寬度厉亏,然后添加margin:0 auto屬性

        div{
            width:200px;
            margin:0 auto;
         }


*  居中一個(gè)浮動(dòng)元素

          確定容器的寬高 寬500 高 300 的層
          設(shè)置層的外邊距

         .div {
              width:500px ; height:300px;//高度可以不設(shè)
              margin: -150px 0 0 -250px;
              position:relative;         //相對(duì)定位
              background-color:pink;     //方便看效果
              left:50%;
              top:50%;
         }

*  讓絕對(duì)定位的div居中

          position: absolute;
          width: 1200px;
          background: none;
          margin: 0 auto;
          top: 0;
          left: 0;
          bottom: 0;
          right: 0;
  • display有哪些值董习?說(shuō)明他們的作用。

        block         象塊類型元素一樣顯示爱只。
        none          缺省值皿淋。象行內(nèi)元素類型一樣顯示。
        inline-block  象行內(nèi)元素一樣顯示恬试,但其內(nèi)容象塊類型元素一樣顯示蛹批。
        list-item     象塊類型元素一樣顯示螟够,并添加樣式列表標(biāo)記矫夯。
        table         此元素會(huì)作為塊級(jí)表格來(lái)顯示
        inherit       規(guī)定應(yīng)該從父元素繼承 display 屬性的值
    
  • position的值relative和absolute定位原點(diǎn)是决帖?

        absolute
          生成絕對(duì)定位的元素砸烦,相對(duì)于值不為 static的第一個(gè)父元素進(jìn)行定位频祝。
        fixed (老IE不支持)
          生成絕對(duì)定位的元素绍填,相對(duì)于瀏覽器窗口進(jìn)行定位喉镰。
        relative
          生成相對(duì)定位的元素乖阵,相對(duì)于其正常位置進(jìn)行定位宣赔。
        static
          默認(rèn)值。沒(méi)有定位瞪浸,元素出現(xiàn)在正常的流中(忽略 top, bottom, left, right z-index 聲明)儒将。
        inherit
          規(guī)定從父元素繼承 position 屬性的值。
    
  • CSS3有哪些新特性对蒲?

        新增各種CSS選擇器    (: not(.input):所有 class 不是“input”的節(jié)點(diǎn))
        圓角           (border-radius:8px)
        多列布局        (multi-column layout)
        陰影和反射      (Shadow\Reflect)
        文字特效      (text-shadow钩蚊、)
        文字渲染      (Text-decoration)
        線性漸變      (gradient)
        旋轉(zhuǎn)          (transform)
        增加了旋轉(zhuǎn),縮放,定位,傾斜,動(dòng)畫(huà),多背景
        transform:\scale(0.85,0.90)\ translate(0px,-30px)\ skew(-9deg,0deg)\Animation:
    
  • 請(qǐng)解釋一下CSS3的Flexbox(彈性盒布局模型),以及適用場(chǎng)景蹈矮?

       .
    
  • 用純CSS創(chuàng)建一個(gè)三角形的原理是什么砰逻?

      把上、左泛鸟、右三條邊隱藏掉(顏色設(shè)為 transparent)
      #demo {
        width: 0;
        height: 0;
        border-width: 20px;
        border-style: solid;
        border-color: transparent transparent red transparent;
      }
    
  • 一個(gè)滿屏 品 字布局 如何設(shè)計(jì)?

      簡(jiǎn)單的方式:
          上面的div寬100%蝠咆,
          下面的兩個(gè)div分別寬50%,
          然后用float或者inline使其不換行即可
    
  • 經(jīng)常遇到的瀏覽器的兼容性有哪些?原因刚操,解決方法是什么闸翅,常用hack的技巧 ?

      * png24位的圖片在iE6瀏覽器上出現(xiàn)背景菊霜,解決方案是做成PNG8.
    
      * 瀏覽器默認(rèn)的margin和padding不同坚冀。解決方案是加一個(gè)全局的*{margin:0;padding:0;}來(lái)統(tǒng)一。
    
      * IE6雙邊距bug:塊屬性標(biāo)簽float后鉴逞,又有橫行的margin情況下记某,在ie6顯示margin比設(shè)置的大。
    
        浮動(dòng)ie產(chǎn)生的雙倍距離 #box{ float:left; width:10px; margin:0 0 0 100px;}
    
        這種情況之下IE會(huì)產(chǎn)生20px的距離华蜒,解決方案是在float的標(biāo)簽樣式控制中加入 ——_display:inline;將其轉(zhuǎn)化為行內(nèi)屬性辙纬。(_這個(gè)符號(hào)只有ie6會(huì)識(shí)別)
    
        漸進(jìn)識(shí)別的方式,從總體中逐漸排除局部叭喜。
    
        首先贺拣,巧妙的使用“\9”這一標(biāo)記,將IE游覽器從所有情況中分離出來(lái)捂蕴。
        接著譬涡,再次使用“+”將IE8和IE7、IE6分離開(kāi)來(lái)啥辨,這樣IE8已經(jīng)獨(dú)立識(shí)別涡匀。
    
        css
            .bb{
                background-color:#f1ee18;/*所有識(shí)別*/
                .background-color:#00deff\9; /*IE6、7溉知、8識(shí)別*/
                +background-color:#a200ff;/*IE6陨瘩、7識(shí)別*/
                _background-color:#1e0bd1;/*IE6識(shí)別*/
            }
    
      *  IE下,可以使用獲取常規(guī)屬性的方法來(lái)獲取自定義屬性,
         也可以使用getAttribute()獲取自定義屬性;
         Firefox下,只能使用getAttribute()獲取自定義屬性。
         解決方法:統(tǒng)一通過(guò)getAttribute()獲取自定義屬性级乍。
    
      *  IE下,even對(duì)象有x,y屬性,但是沒(méi)有pageX,pageY屬性;
         Firefox下,event對(duì)象有pageX,pageY屬性,但是沒(méi)有x,y屬性舌劳。
    
      *  解決方法:(條件注釋)缺點(diǎn)是在IE瀏覽器下可能會(huì)增加額外的HTTP請(qǐng)求數(shù)。
    
      *  Chrome 中文界面下默認(rèn)會(huì)將小于 12px 的文本強(qiáng)制按照 12px 顯示,
         可通過(guò)加入 CSS 屬性 -webkit-text-size-adjust: none; 解決玫荣。
    
      超鏈接訪問(wèn)過(guò)后hover樣式就不出現(xiàn)了 被點(diǎn)擊訪問(wèn)過(guò)的超鏈接樣式不在具有hover和active了解決方法是改變CSS屬性的排列順序:
      L-V-H-A :  a:link {} a:visited {} a:hover {} a:active {}
    
  • li與li之間有看不見(jiàn)的空白間隔是什么原因引起的甚淡?有什么解決辦法?

      行框的排列會(huì)受到中間空白(回車\空格)等的影響捅厂,因?yàn)榭崭褚矊儆谧址?這些空白也會(huì)被應(yīng)用樣式贯卦,占據(jù)空間,所以會(huì)有間隔焙贷,把字符大小設(shè)為0撵割,就沒(méi)有空格了。
    
  • 為什么要初始化CSS樣式盈厘。

      - 因?yàn)闉g覽器的兼容問(wèn)題睁枕,不同瀏覽器對(duì)有些標(biāo)簽的默認(rèn)值是不同的,如果沒(méi)對(duì)CSS初始化往往會(huì)出現(xiàn)瀏覽器之間的頁(yè)面顯示差異。
    
      - 當(dāng)然外遇,初始化樣式會(huì)對(duì)SEO有一定的影響注簿,但魚(yú)和熊掌不可兼得,但力求影響最小的情況下初始化跳仿。
    
      最簡(jiǎn)單的初始化方法: * {padding: 0; margin: 0;} (強(qiáng)烈不建議)
    
      淘寶的樣式初始化代碼:
      body, h1, h2, h3, h4, h5, h6, hr, p, blockquote, dl, dt, dd, ul, ol, li, pre, form, fieldset, legend, button, input, textarea, th, td { margin:0; padding:0; }
      body, button, input, select, textarea { font:12px/1.5tahoma, arial, \5b8b\4f53; }
      h1, h2, h3, h4, h5, h6{ font-size:100%; }
      address, cite, dfn, em, var { font-style:normal; }
      code, kbd, pre, samp { font-family:couriernew, courier, monospace; }
      small{ font-size:12px; }
      ul, ol { list-style:none; }
      a { text-decoration:none; }
      a:hover { text-decoration:underline; }
      sup { vertical-align:text-top; }
      sub{ vertical-align:text-bottom; }
      legend { color:#000; }
      fieldset, img { border:0; }
      button, input, select, textarea { font-size:100%; }
      table { border-collapse:collapse; border-spacing:0; }
    
  • absolute的containing block(容器塊)計(jì)算方式跟正常流有什么不同诡渴?

      無(wú)論屬于哪種,都要先找到其祖先元素中最近的 position 值不為 static 的元素菲语,然后再判斷:
      1妄辩、若此元素為 inline 元素,則 containing block 為能夠包含這個(gè)元素生成的第一個(gè)和最后一個(gè) inline box 的 padding box (除 margin, border 外的區(qū)域) 的最小矩形山上;
      2眼耀、否則,則由這個(gè)祖先元素的 padding box 構(gòu)成。
      如果都找不到佩憾,則為 initial containing block哮伟。
    
      補(bǔ)充:
      1. static(默認(rèn)的)/relative:簡(jiǎn)單說(shuō)就是它的父元素的內(nèi)容框(即去掉padding的部分)
      2. absolute: 向上找最近的定位為absolute/relative的元素
      3. fixed: 它的containing block一律為根元素(html/body),根元素也是initial containing block
    
  • CSS里的visibility屬性有個(gè)collapse屬性值是干嘛用的妄帘?在不同瀏覽器下以后什么區(qū)別楞黄?

  • position跟display、margin collapse抡驼、overflow鬼廓、float這些特性相互疊加后會(huì)怎么樣?

  • 對(duì)BFC規(guī)范(塊級(jí)格式化上下文:block formatting context)的理解致盟?

      (W3C CSS 2.1 規(guī)范中的一個(gè)概念,它是一個(gè)獨(dú)立容器碎税,決定了元素如何對(duì)其內(nèi)容進(jìn)行定位,以及與其他元素的關(guān)系和相互作用。)
       一個(gè)頁(yè)面是由很多個(gè) Box 組成的,元素的類型和 display 屬性,決定了這個(gè) Box 的類型馏锡。
       不同類型的 Box,會(huì)參與不同的 Formatting Context(決定如何渲染文檔的容器),因此Box內(nèi)的元素會(huì)以不同的方式渲染,也就是說(shuō)BFC內(nèi)部的元素和外部的元素不會(huì)互相影響蚣录。
    
  • css定義的權(quán)重

      以下是權(quán)重的規(guī)則:標(biāo)簽的權(quán)重為1,class的權(quán)重為10眷篇,id的權(quán)重為100,以下例子是演示各種定義的權(quán)重值:
    
      /*權(quán)重為1*/
      div{
      }
      /*權(quán)重為10*/
      .class1{
      }
      /*權(quán)重為100*/
      #id1{
      }
      /*權(quán)重為100+1=101*/
      #id1 div{
      }
      /*權(quán)重為10+1=11*/
      .class1 div{
      }
      /*權(quán)重為10+10+1=21*/
      .class1 .class2 div{
      }
    
      如果權(quán)重相同荔泳,則最后定義的樣式會(huì)起作用蕉饼,但是應(yīng)該避免這種情況出現(xiàn)
    
  • 請(qǐng)解釋一下為什么會(huì)出現(xiàn)浮動(dòng)和什么時(shí)候需要清除浮動(dòng)?清除浮動(dòng)的方式

  • 移動(dòng)端的布局用過(guò)媒體查詢嗎玛歌?
  • 使用 CSS 預(yù)處理器嗎昧港?喜歡那個(gè)?

      SASS (SASS支子、LESS沒(méi)有本質(zhì)區(qū)別创肥,只因?yàn)閳F(tuán)隊(duì)前端都是用的SASS)
    
  • CSS優(yōu)化、提高性能的方法有哪些?

  • 瀏覽器是怎樣解析CSS選擇器的叹侄?

  • 在網(wǎng)頁(yè)中的應(yīng)該使用奇數(shù)還是偶數(shù)的字體巩搏?為什么呢?

  • margin和padding分別適合什么場(chǎng)景使用趾代?

  • 抽離樣式模塊怎么寫(xiě)贯底,說(shuō)出思路,有無(wú)實(shí)踐經(jīng)驗(yàn)撒强?[阿里航旅的面試題]

  • 元素豎向的百分比設(shè)定是相對(duì)于容器的高度嗎禽捆?

  • 全屏滾動(dòng)的原理是什么?用到了CSS的那些屬性飘哨?

  • 什么是響應(yīng)式設(shè)計(jì)胚想?響應(yīng)式設(shè)計(jì)的基本原理是什么?如何兼容低版本的IE芽隆?

  • 視差滾動(dòng)效果浊服,如何給每頁(yè)做不同的動(dòng)畫(huà)?(回到頂部摆马,向下滑動(dòng)要再次出現(xiàn)臼闻,和只出現(xiàn)一次分別怎么做?)

  • ::before 和 :after中雙冒號(hào)和單冒號(hào) 有什么區(qū)別囤采?解釋一下這2個(gè)偽元素的作用述呐。

  • 如何修改chrome記住密碼后自動(dòng)填充表單的黃色背景 ?

  • 你對(duì)line-height是如何理解的蕉毯?

  • 設(shè)置元素浮動(dòng)后乓搬,該元素的display值是多少?(自動(dòng)變成display:block)

  • 怎么讓Chrome支持小于12px 的文字代虾?

  • 讓頁(yè)面里的字體變清晰进肯,變細(xì)用CSS怎么做?(-webkit-font-smoothing: antialiased;)

  • font-style屬性可以讓它賦值為“oblique” oblique是什么意思棉磨?

  • position:fixed;在android下無(wú)效怎么處理江掩?

  • 如果需要手動(dòng)寫(xiě)動(dòng)畫(huà),你認(rèn)為最小時(shí)間間隔是多久乘瓤,為什么环形?(阿里)

      多數(shù)顯示器默認(rèn)頻率是60Hz,即1秒刷新60次衙傀,所以理論上最小間隔為1/60*1000ms = 16.7ms
    
  • display:inline-block 什么時(shí)候會(huì)顯示間隙抬吟?(攜程)

      移除空格、使用margin負(fù)值统抬、使用font-size:0危队、letter-spacing叔锐、word-spacing
    
  • overflow: scroll時(shí)不能平滑滾動(dòng)的問(wèn)題怎么處理?

  • 有一個(gè)高度自適應(yīng)的div秉扑,里面有兩個(gè)div踱承,一個(gè)高度100px,希望另一個(gè)填滿剩下的高度泌豆。

  • png俱病、jpg袱结、gif 這些圖片格式解釋一下亮隙,分別什么時(shí)候用。有沒(méi)有了解過(guò)webp垢夹?

  • 什么是Cookie 隔離溢吻?(或者說(shuō):請(qǐng)求資源的時(shí)候不要讓它帶cookie怎么做)

      如果靜態(tài)文件都放在主域名下,那靜態(tài)文件請(qǐng)求的時(shí)候都帶有的cookie的數(shù)據(jù)提交給server的棚饵,非常浪費(fèi)流量煤裙,
      所以不如隔離開(kāi)。
    
      因?yàn)閏ookie有域的限制噪漾,因此不能跨域提交請(qǐng)求硼砰,故使用非主要域名的時(shí)候,請(qǐng)求頭中就不會(huì)帶有cookie數(shù)據(jù)欣硼,
      這樣可以降低請(qǐng)求頭的大小题翰,降低請(qǐng)求時(shí)間,從而達(dá)到降低整體請(qǐng)求延時(shí)的目的诈胜。
    
      同時(shí)這種方式不會(huì)將cookie傳入Web Server豹障,也減少了Web Server對(duì)cookie的處理分析環(huán)節(jié),
      提高了webserver的http請(qǐng)求的解析速度焦匈。
    
  • style標(biāo)簽寫(xiě)在body后與body前有什么區(qū)別血公?

  • 什么是CSS 預(yù)處理器 / 后處理器?

      - 預(yù)處理器例如:LESS缓熟、Sass累魔、Stylus摔笤,用來(lái)預(yù)編譯Sass或less,增強(qiáng)了css代碼的復(fù)用性垦写,
        還有層級(jí)吕世、mixin、變量梯投、循環(huán)命辖、函數(shù)等,具有很方便的UI組件模塊化開(kāi)發(fā)能力分蓖,極大的提高工作效率尔艇。
    
      - 后處理器例如:PostCSS,通常被視為在完成的樣式表中根據(jù)CSS規(guī)范處理CSS咆疗,讓其更有效漓帚;目前最常做的
        是給CSS屬性添加瀏覽器私有前綴,實(shí)現(xiàn)跨瀏覽器兼容性的問(wèn)題午磁。
    

<a name='js'>JavaScript</a>

  • 介紹js的基本數(shù)據(jù)類型尝抖。

      Undefined、Null迅皇、Boolean昧辽、Number、String
    
  • 介紹js有哪些內(nèi)置對(duì)象登颓?

     Object 是 JavaScript 中所有對(duì)象的父對(duì)象
    
     數(shù)據(jù)封裝類對(duì)象:Object搅荞、Array、Boolean框咙、Number 和 String
     其他對(duì)象:Function咕痛、Arguments、Math喇嘱、Date茉贡、RegExp、Error
    
  • 說(shuō)幾條寫(xiě)JavaScript的基本規(guī)范者铜?

     1.不要在同一行聲明多個(gè)變量腔丧。
     2.請(qǐng)使用 ===/!==來(lái)比較true/false或者數(shù)值
     3.使用對(duì)象字面量替代new Array這種形式
     4.不要使用全局函數(shù)。
     5.Switch語(yǔ)句必須帶有default分支
     6.函數(shù)不應(yīng)該有時(shí)候有返回值作烟,有時(shí)候沒(méi)有返回值愉粤。
     7.For循環(huán)必須使用大括號(hào)
     8.If語(yǔ)句必須使用大括號(hào)
     9.for-in循環(huán)中的變量 應(yīng)該使用var關(guān)鍵字明確限定作用域,從而避免作用域污染拿撩。
    
  • JavaScript原型衣厘,原型鏈 ? 有什么特點(diǎn)?

     每個(gè)對(duì)象都會(huì)在其內(nèi)部初始化一個(gè)屬性压恒,就是prototype(原型)头滔,當(dāng)我們?cè)L問(wèn)一個(gè)對(duì)象的屬性時(shí)怖亭,
     如果這個(gè)對(duì)象內(nèi)部不存在這個(gè)屬性,那么他就會(huì)去prototype里找這個(gè)屬性坤检,這個(gè)prototype又會(huì)有自己的prototype,
     于是就這樣一直找下去期吓,也就是我們平時(shí)所說(shuō)的原型鏈的概念早歇。
     關(guān)系:instance.constructor.prototype = instance.__proto__
    
     特點(diǎn):
     JavaScript對(duì)象是通過(guò)引用來(lái)傳遞的,我們創(chuàng)建的每個(gè)新對(duì)象實(shí)體中并沒(méi)有一份屬于自己的原型副本讨勤。當(dāng)我們修改原型時(shí)箭跳,與之相關(guān)的對(duì)象也會(huì)繼承這一改變。
    
    
      當(dāng)我們需要一個(gè)屬性的時(shí)潭千,Javascript引擎會(huì)先看當(dāng)前對(duì)象中是否有這個(gè)屬性谱姓, 如果沒(méi)有的話,
      就會(huì)查找他的Prototype對(duì)象是否有這個(gè)屬性刨晴,如此遞推下去屉来,一直檢索到 Object 內(nèi)建對(duì)象。
         function Func(){}
         Func.prototype.name = "Sean";
         Func.prototype.getInfo = function() {
           return this.name;
         }
         var person = new Func();//現(xiàn)在可以參考var person = Object.create(oldObject);
         console.log(person.getInfo());//它擁有了Func的屬性和方法
         //"Sean"
         console.log(Func.prototype);
         // Func { name="Sean", getInfo=function()}
    
  • JavaScript有幾種類型的值狈癞?茄靠,你能畫(huà)一下他們的內(nèi)存圖嗎?

     棧:原始數(shù)據(jù)類型(Undefined蝶桶,Null慨绳,Boolean,Number真竖、String) 
     堆:引用數(shù)據(jù)類型(對(duì)象脐雪、數(shù)組和函數(shù))
    
     兩種類型的區(qū)別是:存儲(chǔ)位置不同;
     原始數(shù)據(jù)類型直接存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段恢共,占據(jù)空間小战秋、大小固定,屬于被頻繁使用數(shù)據(jù)旁振,所以放入棧中存儲(chǔ)获询;
     引用數(shù)據(jù)類型存儲(chǔ)在堆(heap)中的對(duì)象,占據(jù)空間大、大小不固定,如果存儲(chǔ)在棧中拐袜,將會(huì)影響程序運(yùn)行的性能吉嚣;引用數(shù)據(jù)類型在棧中存儲(chǔ)了指針,該指針指向堆中該實(shí)體的起始地址蹬铺。當(dāng)解釋器尋找引用值時(shí)尝哆,會(huì)首先檢索其
     在棧中的地址,取得地址后從堆中獲得實(shí)體
    
    Stated Clearly Image
  • Javascript如何實(shí)現(xiàn)繼承甜攀?

     1秋泄、構(gòu)造繼承
     2琐馆、原型繼承
     3、實(shí)例繼承
     4恒序、拷貝繼承
    
     原型prototype機(jī)制或apply和call方法去實(shí)現(xiàn)較簡(jiǎn)單瘦麸,建議使用構(gòu)造函數(shù)與原型混合方式。
         
      function Parent(){
             this.name = 'wang';
         }
     
         function Child(){
             this.age = 28;
         }
         Child.prototype = new Parent();//繼承了Parent歧胁,通過(guò)原型
     
         var demo = new Child();
         alert(demo.age);
         alert(demo.name);//得到被繼承的屬性
       }
    
  • JavaScript繼承的幾種實(shí)現(xiàn)方式滋饲?

  • javascript創(chuàng)建對(duì)象的幾種方式屠缭?

     javascript創(chuàng)建對(duì)象簡(jiǎn)單的說(shuō),無(wú)非就是使用內(nèi)置對(duì)象或各種自定義對(duì)象,當(dāng)然還可以用JSON崭参;但寫(xiě)法有很多種呵曹,也能混合使用。
    
    
     1何暮、對(duì)象字面量的方式   
    
         person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
    
     2奄喂、用function來(lái)模擬無(wú)參的構(gòu)造函數(shù)
    
         function Person(){}
         var person=new Person();//定義一個(gè)function,如果使用new"實(shí)例化",該function可以看作是一個(gè)Class
         person.name="Mark";
         person.age="25";
         person.work=function(){
         alert(person.name+" hello...");
         }
         person.work();
    
     3郭卫、用function來(lái)模擬參構(gòu)造函數(shù)來(lái)實(shí)現(xiàn)(用this關(guān)鍵字定義構(gòu)造的上下文屬性)
    
         function Pet(name,age,hobby){
            this.name=name;//this作用域:當(dāng)前對(duì)象
            this.age=age;
            this.hobby=hobby;
            this.eat=function(){
               alert("我叫"+this.name+",我喜歡"+this.hobby+",是個(gè)程序員");
            }
         }
         var maidou =new Pet("麥兜",25,"coding");//實(shí)例化砍聊、創(chuàng)建對(duì)象
         maidou.eat();//調(diào)用eat方法
    
    
     4、用工廠方式來(lái)創(chuàng)建(內(nèi)置對(duì)象)
    
          var wcDog =new Object();
          wcDog.name="旺財(cái)";
          wcDog.age=3;
          wcDog.work=function(){
            alert("我是"+wcDog.name+",汪汪汪......");
          }
          wcDog.work();
    
    
     5贰军、用原型方式來(lái)創(chuàng)建
    
         function Dog(){
         
          }
          Dog.prototype.name="旺財(cái)";
          Dog.prototype.eat=function(){
          alert(this.name+"是個(gè)吃貨");
          }
          var wangcai =new Dog();
          wangcai.eat();
    
    
     5玻蝌、用混合方式來(lái)創(chuàng)建
    
         function Car(name,price){
           this.name=name;
           this.price=price; 
         }
          Car.prototype.sell=function(){
            alert("我是"+this.name+",我現(xiàn)在賣"+this.price+"萬(wàn)元");
           }
         var camry =new Car("凱美瑞",27);
         camry.sell(); 
    
  • Javascript作用鏈域?

     全局函數(shù)無(wú)法查看局部函數(shù)的內(nèi)部細(xì)節(jié)词疼,但局部函數(shù)可以查看其上層的函數(shù)細(xì)節(jié)俯树,直至全局細(xì)節(jié)。
     當(dāng)需要從局部函數(shù)查找某一屬性或方法時(shí)贰盗,如果當(dāng)前作用域沒(méi)有找到许饿,就會(huì)上溯到上層作用域查找,
     直至全局函數(shù)舵盈,這種組織形式就是作用域鏈陋率。
    
  • 談?wù)凾his對(duì)象的理解。

  • this總是指向函數(shù)的直接調(diào)用者(而非間接調(diào)用者)秽晚;

  • 如果有new關(guān)鍵字瓦糟,this指向new出來(lái)的那個(gè)對(duì)象;

  • 在事件中赴蝇,this指向觸發(fā)這個(gè)事件的對(duì)象菩浙,特殊的是,IE中的attachEvent中的this總是指向全局對(duì)象Window;

  • eval是做什么的劲蜻?

     它的功能是把對(duì)應(yīng)的字符串解析成JS代碼并運(yùn)行陆淀;
     應(yīng)該避免使用eval,不安全先嬉,非常耗性能(2次轧苫,一次解析成js語(yǔ)句,一次執(zhí)行)疫蔓。
     由JSON字符串轉(zhuǎn)換為JSON對(duì)象的時(shí)候可以用eval浸剩,var obj =eval('('+ str +')');
    
  • 什么是window對(duì)象? 什么是document對(duì)象?

  • null,undefined 的區(qū)別鳄袍?

     null        表示一個(gè)對(duì)象被定義了,值為“空值”吏恭;
     undefined   表示不存在這個(gè)值拗小。
    
    
     typeof undefined
         //"undefined"
         undefined :是一個(gè)表示"無(wú)"的原始值或者說(shuō)表示"缺少值",就是此處應(yīng)該有一個(gè)值樱哼,但是還沒(méi)有定義哀九。當(dāng)嘗試讀取時(shí)會(huì)返回 undefined; 
         例如變量被聲明了搅幅,但沒(méi)有賦值時(shí)阅束,就等于undefined
    
     typeof null
         //"object"
         null : 是一個(gè)對(duì)象(空對(duì)象, 沒(méi)有任何屬性和方法);
         例如作為函數(shù)的參數(shù)茄唐,表示該函數(shù)的參數(shù)不是對(duì)象息裸;
    
     注意:
         在驗(yàn)證null時(shí),一定要使用 === 沪编,因?yàn)?== 無(wú)法分別 null 和 undefined
    
     
     再來(lái)一個(gè)例子:
    
         null
         Q:有張三這個(gè)人么呼盆?
         A:有!
         Q:張三有房子么蚁廓?
         A:沒(méi)有访圃!
    
         undefined
         Q:有張三這個(gè)人么?
         A:沒(méi)有相嵌!
    

    參考閱讀:undefined與null的區(qū)別

  • 寫(xiě)一個(gè)通用的事件偵聽(tīng)器函數(shù)腿时。

         // event(事件)工具集,來(lái)源:github.com/markyun
         markyun.Event = {
             // 頁(yè)面加載完成后
             readyEvent : function(fn) {
                 if (fn==null) {
                     fn=document;
                 }
                 var oldonload = window.onload;
                 if (typeof window.onload != 'function') {
                     window.onload = fn;
                 } else {
                     window.onload = function() {
                         oldonload();
                         fn();
                     };
                 }
             },
             // 視能力分別使用dom0||dom2||IE方式 來(lái)綁定事件
             // 參數(shù): 操作的元素,事件名稱 ,事件處理程序
             addEvent : function(element, type, handler) {
                 if (element.addEventListener) {
                     //事件類型饭宾、需要執(zhí)行的函數(shù)批糟、是否捕捉
                     element.addEventListener(type, handler, false);
                 } else if (element.attachEvent) {
                     element.attachEvent('on' + type, function() {
                         handler.call(element);
                     });
                 } else {
                     element['on' + type] = handler;
                 }
             },
             // 移除事件
             removeEvent : function(element, type, handler) {
                 if (element.removeEventListener) {
                     element.removeEventListener(type, handler, false);
                 } else if (element.datachEvent) {
                     element.detachEvent('on' + type, handler);
                 } else {
                     element['on' + type] = null;
                 }
             },
             // 阻止事件 (主要是事件冒泡,因?yàn)镮E不支持事件捕獲)
             stopPropagation : function(ev) {
                 if (ev.stopPropagation) {
                     ev.stopPropagation();
                 } else {
                     ev.cancelBubble = true;
                 }
             },
             // 取消事件的默認(rèn)行為
             preventDefault : function(event) {
                 if (event.preventDefault) {
                     event.preventDefault();
                 } else {
                     event.returnValue = false;
                 }
             },
             // 獲取事件目標(biāo)
             getTarget : function(event) {
                 return event.target || event.srcElement;
             },
             // 獲取event對(duì)象的引用捏雌,取到事件的所有信息跃赚,確保隨時(shí)能使用event;
             getEvent : function(e) {
                 var ev = e || window.event;
                 if (!ev) {
                     var c = this.getEvent.caller;
                     while (c) {
                         ev = c.arguments[0];
                         if (ev && Event == ev.constructor) {
                             break;
                         }
                         c = c.caller;
                     }
                 }
                 return ev;
             }
         };
    
  • ["1", "2", "3"].map(parseInt) 答案是多少?

      [1, NaN, NaN] 因?yàn)?parseInt 需要兩個(gè)參數(shù) (val, radix)纬傲,
      其中 radix 表示解析時(shí)用的基數(shù)满败。
      map 傳了 3 個(gè) (element, index, array),對(duì)應(yīng)的 radix 不合法導(dǎo)致解析失敗叹括。
    
  • 事件是算墨?IE與火狐的事件機(jī)制有什么區(qū)別? 如何阻止冒泡汁雷?

      1. 我們?cè)诰W(wǎng)頁(yè)中的某個(gè)操作(有的操作對(duì)應(yīng)多個(gè)事件)净嘀。例如:當(dāng)我們點(diǎn)擊一個(gè)按鈕就會(huì)產(chǎn)生一個(gè)事件。是可以被 JavaScript 偵測(cè)到的行為侠讯。
      2. 事件處理機(jī)制:IE是事件冒泡挖藏、Firefox同時(shí)支持兩種事件模型,也就是:捕獲型事件和冒泡型事件厢漩;
      3. ev.stopPropagation();(舊ie的方法 ev.cancelBubble = true;)
    
  • 什么是閉包(closure)膜眠,為什么要用它?

     閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域中變量的函數(shù)溜嗜,創(chuàng)建閉包的最常見(jiàn)的方式就是在一個(gè)函數(shù)內(nèi)創(chuàng)建另一個(gè)函數(shù)宵膨,通過(guò)另一個(gè)函數(shù)訪問(wèn)這個(gè)函數(shù)的局部變量,利用閉包可以突破作用鏈域,將函數(shù)內(nèi)部的變量和方法傳遞到外部炸宵。
    
     閉包的特性:
    
     1.函數(shù)內(nèi)再嵌套函數(shù)
     2.內(nèi)部函數(shù)可以引用外層的參數(shù)和變量
     3.參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收
    
     //li節(jié)點(diǎn)的onclick事件都能正確的彈出當(dāng)前被點(diǎn)擊的li索引
      <ul id="testUL">
         <li> index = 0</li>
         <li> index = 1</li>
         <li> index = 2</li>
         <li> index = 3</li>
     </ul>
     <script type="text/javascript">
         var nodes = document.getElementsByTagName("li");
         for(i = 0;i<nodes.length;i+= 1){
             nodes[i].onclick = function(){
                 console.log(i+1);//不用閉包的話辟躏,值每次都是4
             }(i);
         }
     </script>
    
    
    
     執(zhí)行say667()后,say667()閉包內(nèi)部變量會(huì)存在,而閉包內(nèi)部函數(shù)的內(nèi)部變量不會(huì)存在
     使得Javascript的垃圾回收機(jī)制GC不會(huì)收回say667()所占用的資源
     因?yàn)閟ay667()的內(nèi)部函數(shù)的執(zhí)行需要依賴say667()中的變量
     這是對(duì)閉包作用的非常直白的描述
    
       function say667() {
         // Local variable that ends up within closure
         var num = 666;
         var sayAlert = function() {
             alert(num);
         }
         num++;
         return sayAlert;
     }
    
      var sayAlert = say667();
      sayAlert()//執(zhí)行結(jié)果應(yīng)該彈出的667
    
  • javascript 代碼中的"use strict";是什么意思 ? 使用它區(qū)別是什么?

     use strict是一種ECMAscript 5 添加的(嚴(yán)格)運(yùn)行模式,這種模式使得 Javascript 在更嚴(yán)格的條件下運(yùn)行,
    
     使JS編碼更加規(guī)范化的模式,消除Javascript語(yǔ)法的一些不合理土全、不嚴(yán)謹(jǐn)之處捎琐,減少一些怪異行為。
     默認(rèn)支持的糟糕特性都會(huì)被禁用涯曲,比如不能用with野哭,也不能在意外的情況下給全局變量賦值;
     全局變量的顯示聲明,函數(shù)必須聲明在頂層,不允許在非函數(shù)代碼塊內(nèi)聲明函數(shù),arguments.callee也不允許使用幻件;
     消除代碼運(yùn)行的一些不安全之處拨黔,保證代碼運(yùn)行的安全,限制函數(shù)中的arguments修改,嚴(yán)格模式下的eval函數(shù)的行為和非嚴(yán)格模式的也不相同;
    
     提高編譯器效率绰沥,增加運(yùn)行速度篱蝇;
     為未來(lái)新版本的Javascript標(biāo)準(zhǔn)化做鋪墊。
    
  • 如何判斷一個(gè)對(duì)象是否屬于某個(gè)類徽曲?

       使用instanceof (待完善)
        if(a instanceof Person){
            alert('yes');
        }
    
  • new操作符具體干了什么呢?

          1零截、創(chuàng)建一個(gè)空對(duì)象,并且 this 變量引用該對(duì)象秃臣,同時(shí)還繼承了該函數(shù)的原型涧衙。
          2哪工、屬性和方法被加入到 this 引用的對(duì)象中。
          3弧哎、新創(chuàng)建的對(duì)象由 this 所引用雁比,并且最后隱式的返回 this 。
    
     var obj  = {};
     obj.__proto__ = Base.prototype;
     Base.call(obj);
    
  • 用原生JavaScript的實(shí)現(xiàn)過(guò)什么功能嗎撤嫩?

  • Javascript中偎捎,有一個(gè)函數(shù),執(zhí)行時(shí)對(duì)象查找時(shí)序攘,永遠(yuǎn)不會(huì)去查找原型茴她,這個(gè)函數(shù)是?

     hasOwnProperty
    
     javaScript中hasOwnProperty函數(shù)方法是返回一個(gè)布爾值程奠,指出一個(gè)對(duì)象是否具有指定名稱的屬性丈牢。此方法無(wú)法檢查該對(duì)象的原型鏈中是否具有該屬性;該屬性必須是對(duì)象本身的一個(gè)成員瞄沙。
     使用方法:
     object.hasOwnProperty(proName)
     其中參數(shù)object是必選項(xiàng)赡麦。一個(gè)對(duì)象的實(shí)例。
     proName是必選項(xiàng)。一個(gè)屬性名稱的字符串值。
    
     如果 object 具有指定名稱的屬性卡睦,那么JavaScript中hasOwnProperty函數(shù)方法返回 true爬泥,反之則返回 false。
    
  • JSON 的了解扒接?

     JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式伪货。
     它是基于JavaScript的一個(gè)子集。數(shù)據(jù)格式簡(jiǎn)單, 易于讀寫(xiě), 占用帶寬小
     如:{"age":"12", "name":"back"}
     
     JSON字符串轉(zhuǎn)換為JSON對(duì)象:
     var obj =eval('('+ str +')');
     var obj = str.parseJSON();
     var obj = JSON.parse(str);
     
     JSON對(duì)象轉(zhuǎn)換為JSON字符串:
     var last=obj.toJSONString();
     var last=JSON.stringify(obj);
    
  • [].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)}) 能解釋一下這段代碼的意思嗎钾怔?

  • js延遲加載的方式有哪些碱呼?

     defer和async、動(dòng)態(tài)創(chuàng)建DOM方式(用得最多)宗侦、按需異步載入js
    
  • Ajax 是什么? 如何創(chuàng)建一個(gè)Ajax愚臀?

     ajax的全稱:Asynchronous Javascript And XML。
     異步傳輸+js+xml矾利。
     所謂異步姑裂,在這里簡(jiǎn)單地解釋就是:向服務(wù)器發(fā)送請(qǐng)求的時(shí)候,我們不必等待結(jié)果男旗,而是可以同時(shí)做其他的事情舶斧,等到有了結(jié)果它自己會(huì)根據(jù)設(shè)定進(jìn)行后續(xù)操作,與此同時(shí)察皇,頁(yè)面是不會(huì)發(fā)生整頁(yè)刷新的茴厉,提高了用戶體驗(yàn)。
    
     (1)創(chuàng)建XMLHttpRequest對(duì)象,也就是創(chuàng)建一個(gè)異步調(diào)用對(duì)象
     (2)創(chuàng)建一個(gè)新的HTTP請(qǐng)求,并指定該HTTP請(qǐng)求的方法、URL及驗(yàn)證信息
     (3)設(shè)置響應(yīng)HTTP請(qǐng)求狀態(tài)變化的函數(shù)
     (4)發(fā)送HTTP請(qǐng)求
     (5)獲取異步調(diào)用返回的數(shù)據(jù)
     (6)使用JavaScript和DOM實(shí)現(xiàn)局部刷新
    
  • 同步和異步的區(qū)別?

    同步的概念應(yīng)該是來(lái)自于OS中關(guān)于同步的概念:不同進(jìn)程為協(xié)同完成某項(xiàng)工作而在先后次序上調(diào)整(通過(guò)阻塞,喚醒等方式).同步強(qiáng)調(diào)的是順序性.誰(shuí)先誰(shuí)后.異步則不存在這種順序性.

同步:瀏覽器訪問(wèn)服務(wù)器請(qǐng)求矾缓,用戶看得到頁(yè)面刷新怀酷,重新發(fā)請(qǐng)求,等請(qǐng)求完,頁(yè)面刷新而账,新內(nèi)容出現(xiàn)胰坟,用戶看到新內(nèi)容,進(jìn)行下一步操作。

異步:瀏覽器訪問(wèn)服務(wù)器請(qǐng)求泞辐,用戶正常操作笔横,瀏覽器后端進(jìn)行請(qǐng)求。等請(qǐng)求完咐吼,頁(yè)面不刷新吹缔,新內(nèi)容也會(huì)出現(xiàn),用戶看到新內(nèi)容锯茄。



(待完善)
  • 如何解決跨域問(wèn)題?

     jsonp厢塘、 iframe、window.name肌幽、window.postMessage晚碾、服務(wù)器上設(shè)置代理頁(yè)面
    
  • 頁(yè)面編碼和被請(qǐng)求的資源編碼如果不一致如何處理?

  • 模塊化開(kāi)發(fā)怎么做喂急?

    立即執(zhí)行函數(shù),不暴露私有成員

         var module1 = (function(){
             var _count = 0;
             var m1 = function(){
               //...
             };
             var m2 = function(){
               //...
             };
             return {
               m1 : m1,
               m2 : m2
             };
           })();
    

    (待完善)

  • AMD(Modules/Asynchronous-Definition)格嘁、CMD(Common Module Definition)規(guī)范區(qū)別?

    AMD 規(guī)范在這里:https://github.com/amdjs/amdjs-api/wiki/AMD

    CMD 規(guī)范在這里:https://github.com/seajs/seajs/issues/242

     Asynchronous Module Definition廊移,異步模塊定義糕簿,所有的模塊將被異步加載,模塊加載不影響后面語(yǔ)句運(yùn)行狡孔。所有依賴某些模塊的語(yǔ)句均放置在回調(diào)函數(shù)中懂诗。
    
      區(qū)別:
    
         1. 對(duì)于依賴的模塊,AMD 是提前執(zhí)行苗膝,CMD 是延遲執(zhí)行殃恒。不過(guò) RequireJS 從 2.0 開(kāi)始,也改成可以延遲執(zhí)行(根據(jù)寫(xiě)法不同辱揭,處理方式不同)芋类。CMD 推崇 as lazy as possible.
         2. CMD 推崇依賴就近,AMD 推崇依賴前置界阁『罘保看代碼:
    
     // CMD
     define(function(require, exports, module) {
         var a = require('./a')
         a.doSomething()
         // 此處略去 100 行
         var b = require('./b') // 依賴可以就近書(shū)寫(xiě)
         b.doSomething()
         // ...
     })
    
     // AMD 默認(rèn)推薦
     define(['./a', './b'], function(a, b) { // 依賴必須一開(kāi)始就寫(xiě)好
         a.doSomething()
         // 此處略去 100 行
         b.doSomething()
         // ...
     })
    
  • requireJS的核心原理是什么?(如何動(dòng)態(tài)加載的泡躯?如何避免多次加載的贮竟?如何
    緩存的丽焊?)

  • 談一談你對(duì)ECMAScript6的了解?

  • ECMAScript6 怎么寫(xiě)class么咕别,為什么會(huì)出現(xiàn)class這種東西?

  • 異步加載JS的方式有哪些技健?

       (1) defer,只支持IE
    
       (2) async:
    
       (3) 創(chuàng)建script惰拱,插入到DOM中雌贱,加載完畢后callBack
    
  • documen.write和 innerHTML的區(qū)別

      document.write只能重繪整個(gè)頁(yè)面
    
      innerHTML可以重繪頁(yè)面的一部分
    
  • DOM操作——怎樣添加、移除偿短、移動(dòng)欣孤、復(fù)制、創(chuàng)建和查找節(jié)點(diǎn)?

      (1)創(chuàng)建新節(jié)點(diǎn)
        createDocumentFragment()    //創(chuàng)建一個(gè)DOM片段
        createElement()   //創(chuàng)建一個(gè)具體的元素
        createTextNode()   //創(chuàng)建一個(gè)文本節(jié)點(diǎn)
      (2)添加昔逗、移除降传、替換、插入
        appendChild()
        removeChild()
        replaceChild()
        insertBefore() //在已有的子節(jié)點(diǎn)前插入一個(gè)新的子節(jié)點(diǎn)
      (3)查找
        getElementsByTagName()    //通過(guò)標(biāo)簽名稱
        getElementsByName()    //通過(guò)元素的Name屬性的值(IE容錯(cuò)能力較強(qiáng)勾怒,會(huì)得到一個(gè)數(shù)組婆排,其中包括id等于name值的)
        getElementById()    //通過(guò)元素Id,唯一性
    
  • .call() 和 .apply() 的區(qū)別笔链?

      例子中用 add 來(lái)替換 sub段只,add.call(sub,3,1) == add(3,1) ,所以運(yùn)行結(jié)果為:alert(4);

      注意:js 中的函數(shù)其實(shí)是對(duì)象鉴扫,函數(shù)名是對(duì) Function 對(duì)象的引用翼悴。

        function add(a,b)
        {
            alert(a+b);
        }

        function sub(a,b)
        {
            alert(a-b);
        }

        add.call(sub,3,1);
  • 數(shù)組和對(duì)象有哪些原生方法,列舉一下幔妨?

  • JS 怎么實(shí)現(xiàn)一個(gè)類。怎么實(shí)例化這個(gè)類

  • JavaScript中的作用域與變量聲明提升谍椅?

  • 如何編寫(xiě)高性能的Javascript误堡?

  • 那些操作會(huì)造成內(nèi)存泄漏?

  • JQuery的源碼看過(guò)嗎雏吭?能不能簡(jiǎn)單概況一下它的實(shí)現(xiàn)原理锁施?

  • jQuery.fn的init方法返回的this指的是什么對(duì)象?為什么要返回this杖们?

  • jquery中如何將數(shù)組轉(zhuǎn)化為json字符串悉抵,然后再轉(zhuǎn)化回來(lái)?

  • jQuery 的屬性拷貝(extend)的實(shí)現(xiàn)原理是什么摘完,如何實(shí)現(xiàn)深拷貝姥饰?

  • jquery.extend 與 jquery.fn.extend的區(qū)別?

  • jQuery 的隊(duì)列是如何實(shí)現(xiàn)的孝治?隊(duì)列可以用在哪些地方列粪?

  • 談一下Jquery中的bind(),live(),delegate(),on()的區(qū)別审磁?

  • JQuery一個(gè)對(duì)象可以同時(shí)綁定多個(gè)事件,這是如何實(shí)現(xiàn)的岂座?

  • 是否知道自定義事件态蒂。jQuery里的fire函數(shù)是什么意思,什么時(shí)候用费什?

  • jQuery 是通過(guò)哪個(gè)方法和 Sizzle 選擇器結(jié)合的钾恢?(jQuery.fn.find()進(jìn)入Sizzle)

  • 針對(duì) jQuery性能的優(yōu)化方法?

  • Jquery與jQuery UI 有啥區(qū)別鸳址?

    *jQuery是一個(gè)js庫(kù)瘩蚪,主要提供的功能是選擇器,屬性修改和事件綁定等等氯质。

    *jQuery UI則是在jQuery的基礎(chǔ)上募舟,利用jQuery的擴(kuò)展性,設(shè)計(jì)的插件闻察。
     提供了一些常用的界面元素拱礁,諸如對(duì)話框、拖動(dòng)行為辕漂、改變大小行為等等
  • JQuery的源碼看過(guò)嗎呢灶?能不能簡(jiǎn)單說(shuō)一下它的實(shí)現(xiàn)原理?

  • jquery 中如何將數(shù)組轉(zhuǎn)化為json字符串钉嘹,然后再轉(zhuǎn)化回來(lái)鸯乃?

jQuery中沒(méi)有提供這個(gè)功能,所以你需要先編寫(xiě)兩個(gè)jQuery的擴(kuò)展:

    $.fn.stringifyArray = function(array) {
        return JSON.stringify(array)
    }

    $.fn.parseArray = function(array) {
        return JSON.parse(array)
    }

    然后調(diào)用:
    $("").stringifyArray(array)
  • jQuery和Zepto的區(qū)別跋涣?各自的使用場(chǎng)景缨睡?

  • 針對(duì) jQuery 的優(yōu)化方法?

     *基于Class的選擇性的性能相對(duì)于Id選擇器開(kāi)銷很大陈辱,因?yàn)樾璞闅v所有DOM元素奖年。
    
     *頻繁操作的DOM,先緩存起來(lái)再操作沛贪。用Jquery的鏈?zhǔn)秸{(diào)用更好陋守。
      比如:var str=$("a").attr("href");
    
     *for (var i = size; i < arr.length; i++) {}
      for 循環(huán)每一次循環(huán)都查找了數(shù)組 (arr) 的.length 屬性,在開(kāi)始循環(huán)的時(shí)候設(shè)置一個(gè)變量來(lái)存儲(chǔ)這個(gè)數(shù)字利赋,可以讓循環(huán)跑得更快:
      for (var i = size, length = arr.length; i < length; i++) {}
    
  • Zepto的點(diǎn)透問(wèn)題如何解決水评?

  • jQueryUI如何自定義組件?

  • 需求:實(shí)現(xiàn)一個(gè)頁(yè)面操作不會(huì)整頁(yè)刷新的網(wǎng)站,并且能在瀏覽器前進(jìn)媚送、后退時(shí)正確響應(yīng)中燥。給出你的技術(shù)實(shí)現(xiàn)方案?

  • 如何判斷當(dāng)前腳本運(yùn)行在瀏覽器還是node環(huán)境中塘偎?(阿里)

      通過(guò)判斷Global對(duì)象是否為window褪那,如果不為window幽纷,當(dāng)前腳本沒(méi)有運(yùn)行在瀏覽器中
    
  • 移動(dòng)端最小觸控區(qū)域是多大?

  • jQuery 的 slideUp動(dòng)畫(huà) 博敬,如果目標(biāo)元素是被外部事件驅(qū)動(dòng), 當(dāng)鼠標(biāo)快速地連續(xù)觸發(fā)外部元素事件, 動(dòng)畫(huà)會(huì)滯后的反復(fù)執(zhí)行友浸,該如何處理呢?

  • 把 Script 標(biāo)簽 放在頁(yè)面的最底部的body封閉之前 和封閉之后有什么區(qū)別?瀏覽器會(huì)如何解析它們偏窝?

  • 移動(dòng)端的點(diǎn)擊事件的有延遲收恢,時(shí)間是多久,為什么會(huì)有祭往? 怎么解決這個(gè)延時(shí)伦意?(click 有 300ms 延遲,為了實(shí)現(xiàn)safari的雙擊事件的設(shè)計(jì),瀏覽器要知道你是不是要雙擊操作硼补。)

  • 知道各種JS框架(Angular, Backbone, Ember, React, Meteor, Knockout...)么? 能講出他們各自的優(yōu)點(diǎn)和缺點(diǎn)么?

  • Underscore 對(duì)哪些 JS 原生對(duì)象進(jìn)行了擴(kuò)展以及提供了哪些好用的函數(shù)方法驮肉?

  • 解釋JavaScript中的作用域與變量聲明提升?

  • 那些操作會(huì)造成內(nèi)存泄漏已骇?

     內(nèi)存泄漏指任何對(duì)象在您不再擁有或需要它之后仍然存在离钝。
     垃圾回收器定期掃描對(duì)象,并計(jì)算引用了每個(gè)對(duì)象的其他對(duì)象的數(shù)量褪储。如果一個(gè)對(duì)象的引用數(shù)量為 0(沒(méi)有其他對(duì)象引用過(guò)該對(duì)象)卵渴,或?qū)υ搶?duì)象的惟一引用是循環(huán)的,那么該對(duì)象的內(nèi)存即可回收鲤竹。
    
     setTimeout 的第一個(gè)參數(shù)使用字符串而非函數(shù)的話浪读,會(huì)引發(fā)內(nèi)存泄漏。
     閉包辛藻、控制臺(tái)日志碘橘、循環(huán)(在兩個(gè)對(duì)象彼此引用且彼此保留時(shí),就會(huì)產(chǎn)生一個(gè)循環(huán))
    
  • JQuery一個(gè)對(duì)象可以同時(shí)綁定多個(gè)事件吱肌,這是如何實(shí)現(xiàn)的痘拆?

  • Node.js的適用場(chǎng)景?

  • (如果會(huì)用node)知道route, middleware, cluster, nodemon, pm2, server-side rendering么?

  • 解釋一下 Backbone 的 MVC 實(shí)現(xiàn)方式岩榆?

  • 什么是“前端路由”?什么時(shí)候適合使用“前端路由”? “前端路由”有哪些優(yōu)點(diǎn)和缺點(diǎn)?

  • 知道什么是webkit么? 知道怎么用瀏覽器的各種工具來(lái)調(diào)試和debug代碼么?

  • 如何測(cè)試前端代碼么? 知道BDD, TDD, Unit Test么? 知道怎么測(cè)試你的前端工程么(mocha, sinon, jasmin, qUnit..)?

  • 前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?

  • 簡(jiǎn)述一下 Handlebars 的基本用法?

  • 簡(jiǎn)述一下 Handlerbars 的對(duì)模板的基本處理流程坟瓢, 如何編譯的勇边?如何緩存的?

  • 用js實(shí)現(xiàn)千位分隔符?(來(lái)源:前端農(nóng)民工折联,提示:正則+replace)

      function commafy(num) {
           num = num + '';
           var reg = /(-?d+)(d{3})/;
          
          if(reg.test(num)){
           num = num.replace(reg, '$1,$2');
          }
          return num;
      }
    
  • 檢測(cè)瀏覽器版本版本有哪些方式粒褒?

      功能檢測(cè)、userAgent特征檢測(cè)
    
      比如:navigator.userAgent
      //"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36
        (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"
    
  • What is a Polyfill?

      polyfill 是“在舊版瀏覽器上復(fù)制標(biāo)準(zhǔn) API 的 JavaScript 補(bǔ)充”,可以動(dòng)態(tài)地加載 JavaScript 代碼或庫(kù)诚镰,在不支持這些標(biāo)準(zhǔn) API 的瀏覽器中模擬它們奕坟。
      例如祥款,geolocation(地理位置)polyfill 可以在 navigator 對(duì)象上添加全局的 geolocation 對(duì)象,還能添加 getCurrentPosition 函數(shù)以及“坐標(biāo)”回調(diào)對(duì)象月杉,
      所有這些都是 W3C 地理位置 API 定義的對(duì)象和函數(shù)刃跛。因?yàn)?polyfill 模擬標(biāo)準(zhǔn) API,所以能夠以一種面向所有瀏覽器未來(lái)的方式針對(duì)這些 API 進(jìn)行開(kāi)發(fā)苛萎,
      一旦對(duì)這些 API 的支持變成絕對(duì)大多數(shù)桨昙,則可以方便地去掉 polyfill,無(wú)需做任何額外工作腌歉。
    
  • 做的項(xiàng)目中蛙酪,有沒(méi)有用過(guò)或自己實(shí)現(xiàn)一些 polyfill 方案(兼容性處理方案)?

      比如: html5shiv翘盖、Geolocation桂塞、Placeholder 
    
  • 我們給一個(gè)dom同時(shí)綁定兩個(gè)點(diǎn)擊事件,一個(gè)用捕獲馍驯,一個(gè)用冒泡阁危。會(huì)執(zhí)行幾次事件,會(huì)先執(zhí)行冒泡還是捕獲泥彤?

<a name='other'>ECMAScript6 相關(guān)</a>

  • Object.is() 與原來(lái)的比較操作符“ ===”、“ ==”的區(qū)別吟吝?

      兩等號(hào)判等俗或,會(huì)在比較時(shí)進(jìn)行類型轉(zhuǎn)換臣镣;
      三等號(hào)判等(判斷嚴(yán)格),比較時(shí)不進(jìn)行隱式類型轉(zhuǎn)換,(類型不同則會(huì)返回false)智亮; 
    
      Object.is 在三等號(hào)判等的基礎(chǔ)上特別處理了 NaN 忆某、-0 和 +0 ,保證 -0 和 +0 不再相同阔蛉,
      但 Object.is(NaN, NaN) 會(huì)返回 true.
    
      Object.is 應(yīng)被認(rèn)為有其特殊的用途弃舒,而不能用它認(rèn)為它比其它的相等對(duì)比更寬松或嚴(yán)格。
    

<a name='other'>前端框架相關(guān)</a>

  • react-router 路由系統(tǒng)的實(shí)現(xiàn)原理状原?

  • React中如何解決第三方類庫(kù)的問(wèn)題?

<a name='other'>其他問(wèn)題</a>

  • 原來(lái)公司工作流程是怎么樣的聋呢,如何與其他人協(xié)作的?如何夸部門(mén)合作的颠区?

  • 你遇到過(guò)比較難的技術(shù)問(wèn)題是削锰?你是如何解決的?

  • 設(shè)計(jì)模式 知道什么是singleton, factory, strategy, decrator么?

  • 常使用的庫(kù)有哪些毕莱?常用的前端開(kāi)發(fā)工具器贩?開(kāi)發(fā)過(guò)什么應(yīng)用或組件?

  • 頁(yè)面重構(gòu)怎么操作朋截?

      網(wǎng)站重構(gòu):在不改變外部行為的前提下蛹稍,簡(jiǎn)化結(jié)構(gòu)、添加可讀性部服,而在網(wǎng)站前端保持一致的行為唆姐。
      也就是說(shuō)是在不改變UI的情況下,對(duì)網(wǎng)站進(jìn)行優(yōu)化廓八,在擴(kuò)展的同時(shí)保持一致的UI奉芦。
    
      對(duì)于傳統(tǒng)的網(wǎng)站來(lái)說(shuō)重構(gòu)通常是:
    
      表格(table)布局改為DIV+CSS
      使網(wǎng)站前端兼容于現(xiàn)代瀏覽器(針對(duì)于不合規(guī)范的CSS、如對(duì)IE6有效的)
      對(duì)于移動(dòng)平臺(tái)的優(yōu)化
      針對(duì)于SEO進(jìn)行優(yōu)化
      深層次的網(wǎng)站重構(gòu)應(yīng)該考慮的方面
    
      減少代碼間的耦合
      讓代碼保持彈性
      嚴(yán)格按規(guī)范編寫(xiě)代碼
      設(shè)計(jì)可擴(kuò)展的API
      代替舊有的框架剧蹂、語(yǔ)言(如VB)
      增強(qiáng)用戶體驗(yàn)
      通常來(lái)說(shuō)對(duì)于速度的優(yōu)化也包含在重構(gòu)中
    
      壓縮JS声功、CSS、image等前端資源(通常是由服務(wù)器來(lái)解決)
      程序的性能優(yōu)化(如數(shù)據(jù)讀寫(xiě))
      采用CDN來(lái)加速資源加載
      對(duì)于JS DOM的優(yōu)化
      HTTP服務(wù)器的文件緩存
    
  • 列舉IE與其他瀏覽器不一樣的特性国夜?

    1减噪、事件不同之處:

        觸發(fā)事件的元素被認(rèn)為是目標(biāo)(target)短绸。而在 IE 中车吹,目標(biāo)包含在 event 對(duì)象的 srcElement 屬性筹裕;
        
        獲取字符代碼、如果按鍵代表一個(gè)字符(shift窄驹、ctrl朝卒、alt除外),IE 的 keyCode 會(huì)返回字符代碼(Unicode)乐埠,DOM 中按鍵的代碼和字符是分離的抗斤,要獲取字符代碼,需要使用 charCode 屬性丈咐;

        阻止某個(gè)事件的默認(rèn)行為瑞眼,IE 中阻止某個(gè)事件的默認(rèn)行為,必須將 returnValue 屬性設(shè)置為 false棵逊,Mozilla 中伤疙,需要調(diào)用 preventDefault() 方法;

        停止事件冒泡辆影,IE 中阻止事件進(jìn)一步冒泡徒像,需要設(shè)置 cancelBubble 為 true,Mozzilla 中蛙讥,需要調(diào)用 stopPropagation()锯蛀;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市次慢,隨后出現(xiàn)的幾起案子旁涤,更是在濱河造成了極大的恐慌,老刑警劉巖经备,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拭抬,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡侵蒙,警方通過(guò)查閱死者的電腦和手機(jī)造虎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)纷闺,“玉大人算凿,你說(shuō)我怎么就攤上這事±绻Γ” “怎么了氓轰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)浸卦。 經(jīng)常有香客問(wèn)我署鸡,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任靴庆,我火速辦了婚禮时捌,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘炉抒。我一直安慰自己奢讨,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布焰薄。 她就那樣靜靜地躺著拿诸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪塞茅。 梳的紋絲不亂的頭發(fā)上亩码,一...
    開(kāi)封第一講書(shū)人閱讀 49,785評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音野瘦,去河邊找鬼蟀伸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛缅刽,可吹牛的內(nèi)容都是我干的啊掏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼衰猛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼迟蜜!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起啡省,我...
    開(kāi)封第一講書(shū)人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤娜睛,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后卦睹,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體畦戒,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年结序,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了障斋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡徐鹤,死狀恐怖垃环,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情返敬,我是刑警寧澤遂庄,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站劲赠,受9級(jí)特大地震影響涛目,放射性物質(zhì)發(fā)生泄漏秸谢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一霹肝、第九天 我趴在偏房一處隱蔽的房頂上張望钮追。 院中可真熱鬧,春花似錦阿迈、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至炭晒,卻和暖如春待逞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背网严。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工识樱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人震束。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓怜庸,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親垢村。 傳聞我的和親對(duì)象是個(gè)殘疾皇子割疾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在線閱讀 http://interview.poetries.top[http://interview.poetr...
    程序員poetry閱讀 114,311評(píng)論 24 450
  • <a name='html'>HTML</a> Doctype作用?標(biāo)準(zhǔn)模式與兼容模式各有什么區(qū)別? (1)嘉栓、<...
    clark124閱讀 3,462評(píng)論 1 19
  • 問(wèn)答題47 /72 常見(jiàn)瀏覽器兼容性問(wèn)題與解決方案宏榕? 參考答案 (1)瀏覽器兼容問(wèn)題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • 在這快節(jié)奏的生活旋律里馋辈,單純地為讀書(shū)相聚抚芦,大都是小女生或者文藝青年的事。在那小資情調(diào)很濃的咖啡館迈螟、音樂(lè)酒吧燕垃,...
    狄瓊閱讀 787評(píng)論 2 4
  • 自從我在大學(xué)旁觀了一部日本電影之后,我一直對(duì)日本的電影和文學(xué)作品有著強(qiáng)烈的鄙視態(tài)度井联。為何是旁觀卜壕,因?yàn)槲以诖髮W(xué)是不怎...
    無(wú)事扯淡閱讀 1,090評(píng)論 0 0