面試題2

PNG

有PNG8和truecolor PNG

PNG8類似GIF顏色上限為256宫蛆,文件小茸俭,支持alpha透明度,無動畫

適合圖標肤晓、背景爷贫、按鈕

18、行內元素float:left后是否變?yōu)閴K級元素补憾?

浮動后漫萄,行內元素不會成為塊狀元素,但是可以設置寬高盈匾。行內元素要想變成塊狀元素腾务,占一行,直接設置display:block;削饵。但如果元素設置了浮動后再設置display:block;那就不會占一行岩瘦。

19、在網頁中的應該使用奇數(shù)還是偶數(shù)的字體葵孤?為什么呢担钮?

偶數(shù)字號相對更容易和 web 設計的其他部分構成比例關系

20、::before 和 :after中雙冒號和單冒號 有什么區(qū)別尤仍?解釋一下這2個偽元素的作用

單冒號(:)用于CSS3偽類箫津,雙冒號(::)用于CSS3偽元素

用于區(qū)分偽類和偽元素

21、如果需要手動寫動畫,你認為最小時間間隔是多久苏遥,為什么饼拍?(阿里)

多數(shù)顯示器默認頻率是60Hz,即1秒刷新60次田炭,所以理論上最小間隔為1/60*1000ms = 16.7ms

22师抄、CSS合并方法

避免使用@import引入多個css文件,可以使用CSS工具將CSS合并為一個CSS文件教硫,例如使用Sass\Compass等

23叨吮、CSS不同選擇器的權重(CSS層疊的規(guī)則)

!important規(guī)則最重要瞬矩,大于其它規(guī)則

行內樣式規(guī)則茶鉴,加1000

對于選擇器中給定的各個ID屬性值,加100

對于選擇器中給定的各個類屬性景用、屬性選擇器或者偽類選擇器涵叮,加10

對于選擇其中給定的各個元素標簽選擇器,加1

如果權值一樣伞插,則按照樣式規(guī)則的先后順序來應用割粮,順序靠后的覆蓋靠前的規(guī)則

24、列出你所知道可以改變頁面布局的屬性

position媚污、display舀瓢、float、width杠步、height氢伟、margin、padding幽歼、top、left谬盐、right甸私、`

25、CSS在性能優(yōu)化方面的實踐

css壓縮與合并飞傀、Gzip壓縮

css文件放在head里皇型、不要用@import

盡量用縮寫、避免用濾鏡砸烦、合理使用選擇器

26弃鸦、CSS3動畫(簡單動畫的實現(xiàn),如旋轉等)

依靠CSS3中提出的三個屬性:transition幢痘、transform唬格、animation

transition:定義了元素在變化過程中是怎么樣的,包含transition-property、transition-duration购岗、transition-timing-function汰聋、transition-delay。

transform:定義元素的變化結果喊积,包含rotate烹困、scale、skew乾吻、translate髓梅。

animation:動畫定義了動作的每一幀(@keyframes)有什么效果,包括animation-name绎签,animation-duration女淑、animation-timing-function、animation-delay辜御、animation-iteration-count鸭你、animation-direction

27、base64的原理及優(yōu)缺點

優(yōu)點可以加密擒权,減少了http請求

缺點是需要消耗CPU進行編解碼

28袱巨、幾種常見的CSS布局

流體布局

.left{float: left;width:100px;height:200px;background: red;? ? }.right{float: right;width:200px;height:200px;background: blue;? ? }.main{margin-left:120px;margin-right:220px;height:200px;background: green;? ? }

圣杯布局

.container{margin-left:120px;margin-right:220px;? ? ? ? }.main{float: left;width:100%;height:300px;background: green;? ? ? ? }.left{position: relative;left: -120px;float: left;height:300px;width:100px;margin-left: -100%;background: red;? ? ? ? }.right{position: relative;right: -220px;float: right;height:300px;width:200px;margin-left: -200px;background: blue;? ? ? ? }

雙飛翼布局

.content{float: left;width:100%;? ? ? ? }.main{height:200px;margin-left:110px;margin-right:220px;background: green;? ? ? ? }.main::after{content:'';display: block;font-size:0;height:0;zoom:1;clear: both;? ? ? ? }.left{float:left;height:200px;width:100px;margin-left: -100%;background: red;? ? ? ? }.right{float: right;height:200px;width:200px;margin-left: -200px;background: blue;? ? ? ? }

29、stylus/sass/less區(qū)別

均具有“變量”碳抄、“混合”愉老、“嵌套”、“繼承”剖效、“顏色混合”五大基本特性

Scss和LESS語法較為嚴謹嫉入,LESS要求一定要使用大括號“{}”,Scss和Stylus可以通過縮進表示層次與嵌套關系

Scss無全局變量的概念璧尸,LESS和Stylus有類似于其它語言的作用域概念

Sass是基于Ruby語言的咒林,而LESS和Stylus可以基于NodeJS?NPM下載相應庫后進行編譯;

30爷光、postcss的作用

可以直觀的理解為:它就是一個平臺垫竞。為什么說它是一個平臺呢?因為我們直接用它蛀序,感覺不能干什么事情欢瞪,但是如果讓一些插件在它上面跑,那么將會很強大

PostCSS?提供了一個解析器徐裸,它能夠將?CSS?解析成抽象語法樹

通過在?PostCSS?這個平臺上遣鼓,我們能夠開發(fā)一些插件,來處理我們的CSS重贺,比如熱門的:autoprefixer

postcss可以對sass處理過后的css再處理 最常見的就是autoprefixer

$JavaScript

1骑祟、閉包

閉包就是能夠讀取其他函數(shù)內部變量的函數(shù)

閉包是指有權訪問另一個函數(shù)作用域中變量的函數(shù)回懦,創(chuàng)建閉包的最常見的方式就是在一個函數(shù)內創(chuàng)建另一個函數(shù),通過另一個函數(shù)訪問這個函數(shù)的局部變量,利用閉包可以突破作用鏈域

閉包的特性:

函數(shù)內再嵌套函數(shù)

內部函數(shù)可以引用外層的參數(shù)和變量

參數(shù)和變量不會被垃圾回收機制回收

說說你對閉包的理解

使用閉包主要是為了設計私有的方法和變量曾我。閉包的優(yōu)點是可以避免全局變量的污染粉怕,缺點是閉包會常駐內存,會增大內存使用量抒巢,使用不當很容易造成內存泄露贫贝。在js中,函數(shù)即閉包蛉谜,只有函數(shù)才會產生作用域的概念

閉包 的最大用處有兩個稚晚,一個是可以讀取函數(shù)內部的變量,另一個就是讓這些變量始終保持在內存中

閉包的另一個用處型诚,是封裝對象的私有屬性和私有方法

好處:能夠實現(xiàn)封裝和緩存等客燕;

壞處:就是消耗內存、不正當使用會造成內存溢出的問題

使用閉包的注意點

由于閉包會使得函數(shù)中的變量都被保存在內存中狰贯,內存消耗很大也搓,所以不能濫用閉包,否則會造成網頁的性能問題涵紊,在IE中可能導致內存泄露

解決方法是傍妒,在退出函數(shù)之前,將不使用的局部變量全部刪除

2摸柄、說說你對作用域鏈的理解

作用域鏈的作用是保證執(zhí)行環(huán)境里有權訪問的變量和函數(shù)是有序的颤练,作用域鏈的變量只能向上訪問,變量訪問到window對象即被終止驱负,作用域鏈向下訪問變量是不被允許的

簡單的說嗦玖,作用域就是變量與函數(shù)的可訪問范圍,即作用域控制著變量與函數(shù)的可見性和生命周期

3跃脊、JavaScript原型宇挫,原型鏈 ? 有什么特點?

每個對象都會在其內部初始化一個屬性匾乓,就是prototype(原型)捞稿,當我們訪問一個對象的屬性時

如果這個對象內部不存在這個屬性,那么他就會去prototype里找這個屬性拼缝,這個prototype又會有自己的prototype,于是就這樣一直找下去彰亥,也就是我們平時所說的原型鏈的概念

關系:instance.constructor.prototype = instance.__proto__

特點:

JavaScript對象是通過引用來傳遞的咧七,我們創(chuàng)建的每個新對象實體中并沒有一份屬于自己的原型副本。當我們修改原型時任斋,與之相關的對象也會繼承這一改變

當我們需要一個屬性的時继阻,Javascript引擎會先看當前對象中是否有這個屬性, 如果沒有的

就會查找他的Prototype對象是否有這個屬性,如此遞推下去瘟檩,一直檢索到?Object?內建對象

4抹缕、請解釋什么是事件代理

事件代理(Event Delegation),又稱之為事件委托墨辛。是?JavaScript?中常用綁定事件的常用技巧卓研。顧名思義,“事件代理”即是把原本需要綁定的事件委托給父元素睹簇,讓父元素擔當事件監(jiān)聽的職務奏赘。事件代理的原理是DOM元素的事件冒泡。使用事件代理的好處是可以提高性能

可以大量節(jié)省內存占用太惠,減少事件注冊磨淌,比如在table上代理所有td的click事件就非常棒

可以實現(xiàn)當新增子對象時無需再次對其綁定

5、Javascript如何實現(xiàn)繼承凿渊?

構造繼承

原型繼承

實例繼承

拷貝繼承

原型prototype機制或apply和call方法去實現(xiàn)較簡單梁只,建議使用構造函數(shù)與原型混合方式

functionParent(){this.name ='wang';? ? }functionChild(){this.age =28;? ? }? ? Child.prototype =newParent();//繼承了Parent,通過原型vardemo =newChild();? ? alert(demo.age);? ? alert(demo.name);//得到被繼承的屬性}

6埃脏、談談This對象的理解

this總是指向函數(shù)的直接調用者(而非間接調用者)

如果有new關鍵字搪锣,this指向new出來的那個對象

在事件中,this指向觸發(fā)這個事件的對象剂癌,特殊的是淤翔,IE中的attachEvent中的this總是指向全局對象Window

7、事件模型

W3C中定義事件的發(fā)生經歷三個階段:捕獲階段(capturing)佩谷、目標階段(targetin)旁壮、冒泡階段(bubbling)

冒泡型事件:當你使用事件冒泡時,子級元素先觸發(fā)谐檀,父級元素后觸發(fā)

捕獲型事件:當你使用事件捕獲時抡谐,父級元素先觸發(fā),子級元素后觸發(fā)

DOM事件流:同時支持兩種事件模型:捕獲型事件和冒泡型事件

阻止冒泡:在W3c中桐猬,使用stopPropagation()方法麦撵;在IE下設置cancelBubble = true

阻止捕獲:阻止事件的默認行為,例如click -?后的跳轉溃肪。在W3c中免胃,使用preventDefault()方法,在IE下設置window.event.returnValue = false

8惫撰、new操作符具體干了什么呢?

創(chuàng)建一個空對象羔沙,并且?this?變量引用該對象,同時還繼承了該函數(shù)的原型

屬性和方法被加入到?this?引用的對象中

新創(chuàng)建的對象由?this?所引用厨钻,并且最后隱式的返回?this

9扼雏、Ajax原理

Ajax的原理簡單來說是在用戶和服務器之間加了—個中間層(AJAX引擎)坚嗜,通過XmlHttpRequest對象來向服務器發(fā)異步請求,從服務器獲得數(shù)據诗充,然后用javascript來操作DOM而更新頁面苍蔬。使用戶操作與服務器響應異步化。這其中最關鍵的一步就是從服務器獲得請求數(shù)據

Ajax的過程只涉及JavaScript蝴蜓、XMLHttpRequest和DOM碟绑。XMLHttpRequest是ajax的核心機制

// 1. 創(chuàng)建連接varxhr =null;? ? xhr =newXMLHttpRequest()// 2. 連接服務器xhr.open('get', url,true)// 3. 發(fā)送請求xhr.send(null);// 4. 接受請求xhr.onreadystatechange =function(){if(xhr.readyState ==4){if(xhr.status ==200){? ? ? ? ? ? ? ? success(xhr.responseText);? ? ? ? ? ? }else{// failfail && fail(xhr.status);? ? ? ? ? ? }? ? ? ? }? ? }

ajax 有那些優(yōu)缺點?

優(yōu)點:

通過異步模式,提升了用戶體驗.

優(yōu)化了瀏覽器和服務器之間的傳輸励翼,減少不必要的數(shù)據往返蜈敢,減少了帶寬占用.

Ajax在客戶端運行,承擔了一部分本來由服務器承擔的工作汽抚,減少了大用戶量下的服務器負載抓狭。

Ajax可以實現(xiàn)動態(tài)不刷新(局部刷新)

缺點:

安全問題?AJAX暴露了與服務器交互的細節(jié)。

對搜索引擎的支持比較弱造烁。

不容易調試否过。

10、如何解決跨域問題?

jsonp惭蟋、?iframe苗桂、window.name、window.postMessage告组、服務器上設置代理頁面

11煤伟、模塊化開發(fā)怎么做?

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

varmodule1 = (function(){var_count =0;varm1 =function(){//...};varm2 =function(){//...};return{m1: m1,m2: m2    };  })();

12木缝、異步加載JS的方式有哪些便锨?

defer,只支持IE

async:

創(chuàng)建script我碟,插入到DOM中放案,加載完畢后callBack

13、那些操作會造成內存泄漏矫俺?

內存泄漏指任何對象在您不再擁有或需要它之后仍然存在

setTimeout?的第一個參數(shù)使用字符串而非函數(shù)的話吱殉,會引發(fā)內存泄漏

閉包使用不當

14、XML和JSON的區(qū)別厘托?

數(shù)據體積方面

JSON相對于XML來講友雳,數(shù)據的體積小,傳遞的速度更快些铅匹。

數(shù)據交互方面

JSON與JavaScript的交互更加方便沥阱,更容易解析處理,更好的數(shù)據交互

數(shù)據描述方面

JSON對數(shù)據的描述性比XML較差

傳輸速度方面

JSON的速度要遠遠快于XML

15伊群、談談你對webpack的看法

WebPack?是一個模塊打包工具考杉,你可以使用WebPack管理你的模塊依賴,并編繹輸出模塊們所需的靜態(tài)文件舰始。它能夠很好地管理崇棠、打包Web開發(fā)中所用到的HTML、Javascript丸卷、CSS以及各種靜態(tài)文件(圖片枕稀、字體等),讓開發(fā)過程更加高效谜嫉。對于不同類型的資源萎坷,webpack有對應的模塊加載器。webpack模塊打包器會分析模塊間的依賴關系沐兰,最后 生成了優(yōu)化且合并后的靜態(tài)資源

16哆档、說說你對AMD和Commonjs的理解

CommonJS是服務器端模塊的規(guī)范,Node.js采用了這個規(guī)范住闯。CommonJS規(guī)范加載模塊是同步的瓜浸,也就是說,只有加載完成比原,才能執(zhí)行后面的操作插佛。AMD規(guī)范則是非同步加載模塊,允許指定回調函數(shù)

AMD推薦的風格通過返回一個對象做為模塊對象量窘,CommonJS的風格通過對module.exports或exports的屬性賦值來達到暴露模塊對象的目的

17雇寇、常見web安全及防護原理

sql注入原理

就是通過把SQL命令插入到Web表單遞交或輸入域名或頁面請求的查詢字符串,最終達到欺騙服務器執(zhí)行惡意的SQL命令

總的來說有以下幾點

永遠不要信任用戶的輸入蚌铜,要對用戶的輸入進行校驗锨侯,可以通過正則表達式,或限制長度厘线,對單引號和雙"-"進行轉換等

永遠不要使用動態(tài)拼裝SQL识腿,可以使用參數(shù)化的SQL或者直接使用存儲過程進行數(shù)據查詢存取

永遠不要使用管理員權限的數(shù)據庫連接,為每個應用使用單獨的權限有限的數(shù)據庫連接

不要把機密信息明文存放造壮,請加密或者hash掉密碼和敏感的信息

XSS原理及防范

Xss(cross-site scripting)攻擊指的是攻擊者往Web頁面里插入惡意html標簽或者javascript代碼渡讼。比如:攻擊者在論壇中放一個看似安全的鏈接,騙取用戶點擊后耳璧,竊取cookie中的用戶私密信息成箫;或者攻擊者在論壇中加一個惡意表單,當用戶提交表單的時候旨枯,卻把信息傳送到攻擊者的服務器中蹬昌,而不是用戶原本以為的信任站點

XSS防范方法

首先代碼里對用戶輸入的地方和變量都需要仔細檢查長度和對”<”,”>”,”;”,”’”等字符做過濾;其次任何內容寫到頁面之前都必須加以encode攀隔,避免不小心把html tag?弄出來皂贩。這一個層面做好栖榨,至少可以堵住超過一半的XSS 攻擊

XSS與CSRF有什么區(qū)別嗎?

XSS是獲取信息明刷,不需要提前知道其他用戶頁面的代碼和數(shù)據包婴栽。CSRF是代替用戶完成指定的動作,需要知道其他用戶頁面的代碼和數(shù)據包辈末。要完成一次CSRF攻擊愚争,受害者必須依次完成兩個步驟

登錄受信任網站A,并在本地生成Cookie

在不登出A的情況下挤聘,訪問危險網站B

CSRF的防御

服務端的CSRF方式方法很多樣轰枝,但總的思想都是一致的,就是在客戶端頁面增加偽隨機數(shù)

通過驗證碼的方法

18组去、用過哪些設計模式鞍陨?

工廠模式:

工廠模式解決了重復實例化的問題,但還有一個問題,那就是識別問題添怔,因為根本無法

主要好處就是可以消除對象間的耦合湾戳,通過使用工程方法而不是new關鍵字

構造函數(shù)模式

使用構造函數(shù)的方法,即解決了重復實例化的問題广料,又解決了對象識別的問題砾脑,該模式與工廠模式的不同之處在于

直接將屬性和方法賦值給?this對象;

19、為什么要有同源限制艾杏?

同源策略指的是:協(xié)議韧衣,域名,端口相同购桑,同源策略是一種安全協(xié)議

舉例說明:比如一個黑客程序畅铭,他利用Iframe把真正的銀行登錄頁面嵌到他的頁面上,當你使用真實的用戶名勃蜘,密碼登錄時硕噩,他的頁面就可以通過Javascript讀取到你的表單中input中的內容,這樣用戶名缭贡,密碼就輕松到手了炉擅。

20、offsetWidth/offsetHeight,clientWidth/clientHeight與scrollWidth/scrollHeight的區(qū)別

offsetWidth/offsetHeight返回值包含content + padding + border阳惹,效果與e.getBoundingClientRect()相同

clientWidth/clientHeight返回值只包含content + padding谍失,如果有滾動條,也不包含滾動條

scrollWidth/scrollHeight返回值包含content + padding + 溢出內容的尺寸

21莹汤、javascript有哪些方法定義對象

對象字面量:?var obj = {};

構造函數(shù):?var obj = new Object();

Object.create():?var obj = Object.create(Object.prototype);

22快鱼、常見兼容性問題冠王?

png24位的圖片在iE6瀏覽器上出現(xiàn)背景在塔,解決方案是做成PNG8

瀏覽器默認的margin和padding不同虚倒。解決方案是加一個全局的*{margin:0;padding:0;}來統(tǒng)一,琉挖,但是全局效率很低鸣奔,一般是如下這樣解決:

body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{margin:0;padding:0;}

IE下,event對象有x,y屬性,但是沒有pageX,pageY屬性

Firefox下,event對象有pageX,pageY屬性,但是沒有x,y屬性.

22沦零、說說你對promise的了解

依照?Promise/A+?的定義纲熏,Promise?有四種狀態(tài):

pending:?初始狀態(tài), 非?fulfilled?或?rejected.

fulfilled:?成功的操作.

rejected:?失敗的操作.

settled: Promise已被fulfilled或rejected尘吗,且不是pending

另外,?fulfilled與?rejected一起合稱?settled

Promise?對象用來進行延遲(deferred) 和異步(asynchronous) 計算

Promise 的構造函數(shù)

構造一個?Promise兢孝,最基本的用法如下:

varpromise =newPromise(function(resolve, reject){if(...) {// succeedresolve(result);? ? ? ? }else{// failsreject(Error(errMessage));? ? ? ? }? ? });

Promise?實例擁有?then?方法(具有?then?方法的對象,通常被稱為thenable)仅偎。它的使用方法如下:

promise.then(onFulfilled, onRejected)

接收兩個函數(shù)作為參數(shù)跨蟹,一個在?fulfilled?的時候被調用,一個在rejected的時候被調用橘沥,接收參數(shù)就是?future窗轩,onFulfilled?對應resolve,?onRejected對應?reject

23、你覺得jQuery源碼有哪些寫的好的地方

jquery源碼封裝在一個匿名函數(shù)的自執(zhí)行環(huán)境中座咆,有助于防止變量的全局污染痢艺,然后通過傳入window對象參數(shù),可以使window對象作為局部變量使用介陶,好處是當jquery中訪問window對象的時候堤舒,就不用將作用域鏈退回到頂層作用域了,從而可以更快的訪問window對象哺呜。同樣舌缤,傳入undefined參數(shù),可以縮短查找undefined時的作用域鏈

jquery將一些原型屬性和方法封裝在了jquery.prototype中某残,為了縮短名稱国撵,又賦值給了jquery.fn,這是很形象的寫法

有一些數(shù)組或對象的方法經常能使用到玻墅,jQuery將其保存為局部變量以提高訪問速度

jquery實現(xiàn)的鏈式調用可以節(jié)約代碼介牙,所返回的都是同一個對象,可以提高代碼效率

24澳厢、vue环础、react、angular

Vue.js

一個用于創(chuàng)建?web?交互界面的庫赏酥,是一個精簡的?MVVM喳整。它通過雙向數(shù)據綁定把?View層和?Model?層連接了起來。實際的?DOM?封裝和輸出格式都被抽象為了Directives?和?Filters

AngularJS

是一個比較完善的前端MVVM框架裸扶,包含模板框都,數(shù)據雙向綁定,路由,模塊化魏保,服務熬尺,依賴注入等所有功能,模板功能強大豐富谓罗,自帶了豐富的?Angular指令

react

React?僅僅是?VIEW?層是facebook公司粱哼。推出的一個用于構建UI的一個庫,能夠實現(xiàn)服務器端的渲染檩咱。用了virtual dom揭措,所以性能很好。

25刻蚯、Node的應用場景

特點:

1绊含、它是一個Javascript運行環(huán)境

2、依賴于Chrome V8引擎進行代碼解釋

3炊汹、事件驅動

4躬充、非阻塞I/O

5、單進程讨便,單線程

優(yōu)點:

高并發(fā)(最重要的優(yōu)點)

缺點:

1充甚、只支持單核CPU,不能充分利用CPU

2霸褒、可靠性低伴找,一旦代碼某個環(huán)節(jié)崩潰,整個系統(tǒng)都崩潰

26傲霸、談談你對AMD疆瑰、CMD的理解

CommonJS是服務器端模塊的規(guī)范,Node.js采用了這個規(guī)范昙啄。CommonJS規(guī)范加載模塊是同步的穆役,也就是說,只有加載完成梳凛,才能執(zhí)行后面的操作耿币。AMD規(guī)范則是非同步加載模塊,允許指定回調函數(shù)

AMD推薦的風格通過返回一個對象做為模塊對象韧拒,CommonJS的風格通過對module.exports或exports的屬性賦值來達到暴露模塊對象的目的

27淹接、那些操作會造成內存泄漏?

內存泄漏指任何對象在您不再擁有或需要它之后仍然存在

setTimeout?的第一個參數(shù)使用字符串而非函數(shù)的話叛溢,會引發(fā)內存泄漏

閉包塑悼、控制臺日志、循環(huán)(在兩個對象彼此引用且彼此保留時楷掉,就會產生一個循環(huán))

28厢蒜、web開發(fā)中會話跟蹤的方法有哪些

cookie

session

url重寫

隱藏input

ip地址

29、介紹js的基本數(shù)據類型

Undefined、Null斑鸦、Boolean愕贡、Number、String

30巷屿、介紹js有哪些內置對象固以?

Object?是?JavaScript?中所有對象的父對象

數(shù)據封裝類對象:Object、Array嘱巾、Boolean憨琳、Number?和?String

其他對象:Function、Arguments浓冒、Math栽渴、Date、RegExp稳懒、Error

31、說幾條寫JavaScript的基本規(guī)范慢味?

不要在同一行聲明多個變量

請使用===/!==來比較true/false或者數(shù)值

使用對象字面量替代new Array這種形式

不要使用全局函數(shù)

Switch語句必須帶有default分支

If語句必須使用大括號

for-in循環(huán)中的變量 應該使用var關鍵字明確限定作用域场梆,從而避免作用域污

32、JavaScript有幾種類型的值纯路?或油,你能畫一下他們的內存圖嗎?

棧:原始數(shù)據類型(Undefined驰唬,Null顶岸,Boolean,Number叫编、String)

堆:引用數(shù)據類型(對象辖佣、數(shù)組和函數(shù))

兩種類型的區(qū)別是:存儲位置不同;

原始數(shù)據類型直接存儲在棧(stack)中的簡單數(shù)據段搓逾,占據空間小卷谈、大小固定,屬于被頻繁使用數(shù)據霞篡,所以放入棧中存儲世蔗;

引用數(shù)據類型存儲在堆(heap)中的對象,占據空間大、大小不固定,如果存儲在棧中朗兵,將會影響程序運行的性能污淋;引用數(shù)據類型在棧中存儲了指針,該指針指向堆中該實體的起始地址余掖。當解釋器尋找引用值時寸爆,會首先檢索其

在棧中的地址,取得地址后從堆中獲得實體

image

33、javascript創(chuàng)建對象的幾種方式而昨?

javascript創(chuàng)建對象簡單的說,無非就是使用內置對象或各種自定義對象救氯,當然還可以用JSON;但寫法有很多種歌憨,也能混合使用

對象字面量的方式

person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};

用function來模擬無參的構造函數(shù)

functionPerson(){}varperson=newPerson();//定義一個function着憨,如果使用new"實例化",該function可以看作是一個Classperson.name="Mark";? ? ? ? person.age="25";? ? ? ? person.work=function(){? ? ? ? alert(person.name+" hello...");? ? }person.work();

用function來模擬參構造函數(shù)來實現(xiàn)(用this關鍵字定義構造的上下文屬性)

functionPet(name,age,hobby){this.name=name;//this作用域:當前對象this.age=age;this.hobby=hobby;this.eat=function(){? ? ? ? ? alert("我叫"+this.name+",我喜歡"+this.hobby+",是個程序員");? ? ? }? ? }varmaidou =newPet("麥兜",25,"coding");//實例化、創(chuàng)建對象maidou.eat();//調用eat方法

用工廠方式來創(chuàng)建(內置對象)

varwcDog =newObject();? ? wcDog.name="旺財";? ? wcDog.age=3;? ? wcDog.work=function(){? ? ? alert("我是"+wcDog.name+",汪汪汪......");? ? }? ? wcDog.work();

用原型方式來創(chuàng)建

functionDog(){? ? }? ? Dog.prototype.name="旺財";? ? Dog.prototype.eat=function(){? ? alert(this.name+"是個吃貨");? ? }varwangcai =newDog();? ? wangcai.eat();

用混合方式來創(chuàng)建

functionCar(name,price){this.name=name;this.price=price;? ? }? ? Car.prototype.sell=function(){? ? ? alert("我是"+this.name+"务嫡,我現(xiàn)在賣"+this.price+"萬元");? ? ? }varcamry =newCar("凱美瑞",27);? ? camry.sell();

34甲抖、eval是做什么的?

它的功能是把對應的字符串解析成JS代碼并運行

應該避免使用eval心铃,不安全准谚,非常耗性能(2次,一次解析成js語句去扣,一次執(zhí)行)

由JSON字符串轉換為JSON對象的時候可以用eval柱衔,var obj =eval('('+ str +')')

35、null愉棱,undefined 的區(qū)別唆铐?

undefined?表示不存在這個值。

undefined?:是一個表示"無"的原始值或者說表示"缺少值"奔滑,就是此處應該有一個值艾岂,但是還沒有定義。當嘗試讀取時會返回?undefined

例如變量被聲明了朋其,但沒有賦值時王浴,就等于undefined

null?表示一個對象被定義了,值為“空值”

null?: 是一個對象(空對象, 沒有任何屬性和方法)

例如作為函數(shù)的參數(shù)梅猿,表示該函數(shù)的參數(shù)不是對象氓辣;

在驗證null時,一定要使用===?粒没,因為?==無法分別null?和undefined

36筛婉、["1", "2", "3"].map(parseInt) 答案是多少?

[1, NaN, NaN]因為?parseInt?需要兩個參數(shù)?(val, radix)癞松,其中radix?表示解析時用的基數(shù)爽撒。

map傳了?3個(element, index, array),對應的?radix?不合法導致解析失敗响蓉。

37硕勿、javascript 代碼中的"use strict";是什么意思 ? 使用它區(qū)別是什么?

use strict是一種ECMAscript 5?添加的(嚴格)運行模式,這種模式使得 Javascript 在更嚴格的條件下運行,使JS編碼更加規(guī)范化的模式,消除Javascript語法的一些不合理枫甲、不嚴謹之處源武,減少一些怪異行為

38扼褪、JSON 的了解?

JSON(JavaScript Object Notation)?是一種輕量級的數(shù)據交換格式

它是基于JavaScript的一個子集粱栖。數(shù)據格式簡單, 易于讀寫, 占用帶寬小

JSON字符串轉換為JSON對象:

varobj =eval('('+ str +')');varobj = str.parseJSON();varobj =JSON.parse(str);

JSON對象轉換為JSON字符串:

varlast=obj.toJSONString();varlast=JSON.stringify(obj);

39话浇、js延遲加載的方式有哪些?

defer和async闹究、動態(tài)創(chuàng)建DOM方式(用得最多)幔崖、按需異步載入js

40、同步和異步的區(qū)別?

同步:瀏覽器訪問服務器請求渣淤,用戶看得到頁面刷新赏寇,重新發(fā)請求,等請求完,頁面刷新价认,新內容出現(xiàn)嗅定,用戶看到新內容,進行下一步操作

異步:瀏覽器訪問服務器請求,用戶正常操作用踩,瀏覽器后端進行請求渠退。等請求完,頁面不刷新脐彩,新內容也會出現(xiàn)智什,用戶看到新內容

41、漸進增強和優(yōu)雅降級

漸進增強 :針對低版本瀏覽器進行構建頁面丁屎,保證最基本的功能,然后再針對高級瀏覽器進行效果旱眯、交互等改進和追加功能達到更好的用戶體驗晨川。

優(yōu)雅降級 :一開始就構建完整的功能,然后再針對低版本瀏覽器進行兼容

42删豺、defer和async

defer并行加載js文件共虑,會按照頁面上script標簽的順序執(zhí)行

async并行加載js文件,下載完成立即執(zhí)行呀页,不會按照頁面上script標簽的順序執(zhí)行

43妈拌、說說嚴格模式的限制

變量必須聲明后再使用

函數(shù)的參數(shù)不能有同名屬性,否則報錯

不能使用with語句

禁止this指向全局對象

44蓬蝶、attribute和property的區(qū)別是什么尘分?

attribute是dom元素在文檔中作為html標簽擁有的屬性;

property就是dom元素在js中作為對象擁有的屬性丸氛。

對于html的標準屬性來說培愁,attribute和property是同步的,是會自動更新的

但是對于自定義的屬性來說缓窜,他們是不同步的

45定续、談談你對ES6的理解

新增模板字符串(為JavaScript提供了簡單的字符串插值功能)

箭頭函數(shù)

for-of(用來遍歷數(shù)據—例如數(shù)組中的值谍咆。)

arguments對象可被不定參數(shù)和默認參數(shù)完美代替。

ES6將promise對象納入規(guī)范私股,提供了原生的Promise對象摹察。

增加了let和const命令,用來聲明變量倡鲸。

增加了塊級作用域供嚎。

let命令實際上就增加了塊級作用域。

還有就是引入module模塊的概念

46旦签、ECMAScript6 怎么寫class么查坪,為什么會出現(xiàn)class這種東西?

這個語法糖可以讓有OOP基礎的人更快上手js,至少是一個官方的實現(xiàn)了

但對熟悉js的人來說宁炫,這個東西沒啥大影響偿曙;一個Object.creat()搞定繼承,比class簡潔清晰的多

47羔巢、什么是面向對象編程及面向過程編程望忆,它們的異同和優(yōu)缺點

面向過程就是分析出解決問題所需要的步驟,然后用函數(shù)把這些步驟一步一步實現(xiàn)竿秆,使用的時候一個一個依次調用就可以了

面向對象是把構成問題事務分解成各個對象启摄,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為

面向對象是以功能來劃分問題幽钢,而不是步驟

48歉备、面向對象編程思想

基本思想是使用對象,類匪燕,繼承蕾羊,封裝等基本概念來進行程序設計

優(yōu)點

易維護

采用面向對象思想設計的結構,可讀性高帽驯,由于繼承的存在龟再,即使改變需求,那么維護也只是在局部模塊尼变,所以維護起來是非常方便和較低成本的

易擴展

開發(fā)工作的重用性利凑、繼承性高,降低重復工作量嫌术。

縮短了開發(fā)周期

49哀澈、對web標準、可用性蛉威、可訪問性的理解

可用性(Usability):產品是否容易上手日丹,用戶能否完成任務,效率如何蚯嫌,以及這過程中用戶的主觀感受可好哲虾,是從用戶的角度來看產品的質量丙躏。可用性好意味著產品質量高束凑,是企業(yè)的核心競爭力

可訪問性(Accessibility):Web內容對于殘障用戶的可閱讀和可理解性

可維護性(Maintainability):一般包含兩個層次晒旅,一是當系統(tǒng)出現(xiàn)問題時,快速定位并解決問題的成本汪诉,成本低則可維護性好废恋。二是代碼是否容易被人理解,是否容易修改和增強功能扒寄。

50鱼鼓、如何通過JS判斷一個數(shù)組?

instanceof方法

instanceof?運算符是用來測試一個對象是否在其原型鏈原型構造函數(shù)的屬性

vararr = []; arrinstanceofArray;// true

constructor方法

constructor屬性返回對創(chuàng)建此對象的數(shù)組函數(shù)的引用该编,就是返回對象相對應的構造函數(shù)

vararr = []; arr.constructor ==Array;//true

最簡單的方法

這種寫法迄本,是?jQuery?正在使用的

Object.prototype.toString.call(value) =='[object Array]'// 利用這個方法,可以寫一個返回數(shù)據類型的方法varisType =function(obj){returnObject.prototype.toString.call(obj).slice(8,-1); }

ES5新增方法isArray()

vara =newArray(123);varb =newDate();console.log(Array.isArray(a));//trueconsole.log(Array.isArray(b));//false

51课竣、談一談let與var的區(qū)別嘉赎?

let命令不存在變量提升,如果在let前使用于樟,會導致報錯

如果塊區(qū)中存在let和const命令公条,就會形成封閉作用域

不允許重復聲明,因此迂曲,不能在函數(shù)內部重新聲明參數(shù)

52靶橱、map與forEach的區(qū)別?

forEach方法路捧,是最基本的方法抓韩,就是遍歷與循環(huán),默認有3個傳參:分別是遍歷的數(shù)組內容item鬓长、數(shù)組索引index、和當前遍歷數(shù)組Array

map方法尝江,基本用法與forEach一致涉波,但是不同的,它會返回一個新的數(shù)組炭序,所以在callback需要有return值啤覆,如果沒有,會返回undefined

53惭聂、談一談你理解的函數(shù)式編程窗声?

簡單說,"函數(shù)式編程"是一種"編程范式"(programming paradigm)辜纲,也就是如何編寫程序的方法論

它具有以下特性:閉包和高階函數(shù)笨觅、惰性計算拦耐、遞歸、函數(shù)是"第一等公民"见剩、只用"表達式"

54杀糯、談一談箭頭函數(shù)與普通函數(shù)的區(qū)別?

函數(shù)體內的this對象苍苞,就是定義時所在的對象固翰,而不是使用時所在的對象

不可以當作構造函數(shù),也就是說羹呵,不可以使用new命令骂际,否則會拋出一個錯誤

不可以使用arguments對象,該對象在函數(shù)體內不存在冈欢。如果要用歉铝,可以用Rest參數(shù)代替

不可以使用yield命令,因此箭頭函數(shù)不能用作Generator函數(shù)

55涛癌、談一談函數(shù)中this的指向吧犯戏?

this的指向在函數(shù)定義的時候是確定不了的,只有函數(shù)執(zhí)行的時候才能確定this到底指向誰拳话,實際上this的最終指向的是那個調用它的對象

《javascript語言精髓》中大概概括了4種調用方式:

方法調用模式

函數(shù)調用模式

構造器調用模式

graph LR

A-->B

apply/call調用模式

56先匪、異步編程的實現(xiàn)方式?

回調函數(shù)

優(yōu)點:簡單弃衍、容易理解

缺點:不利于維護呀非,代碼耦合高

事件監(jiān)聽(采用時間驅動模式,取決于某個事件是否發(fā)生):

優(yōu)點:容易理解镜盯,可以綁定多個事件岸裙,每個事件可以指定多個回調函數(shù)

缺點:事件驅動型,流程不夠清晰

發(fā)布/訂閱(觀察者模式)

類似于事件監(jiān)聽速缆,但是可以通過‘消息中心’降允,了解現(xiàn)在有多少發(fā)布者,多少訂閱者

Promise對象

優(yōu)點:可以利用then方法艺糜,進行鏈式寫法剧董;可以書寫錯誤時的回調函數(shù);

缺點:編寫和理解破停,相對比較難

Generator函數(shù)

優(yōu)點:函數(shù)體內外的數(shù)據交換翅楼、錯誤處理機制

缺點:流程管理不方便

async函數(shù)

優(yōu)點:內置執(zhí)行器、更好的語義真慢、更廣的適用性毅臊、返回的是Promise、結構清晰黑界。

缺點:錯誤處理機制

57管嬉、對原生Javascript了解程度

數(shù)據類型皂林、運算、對象宠蚂、Function式撼、繼承、閉包求厕、作用域著隆、原型鏈、事件呀癣、RegExp美浦、JSON、Ajax项栏、DOM浦辨、BOM、內存泄漏沼沈、跨域流酬、異步裝載、模板引擎列另、前端MVC芽腾、路由、模塊化页衙、Canvas摊滔、ECMAScript

58、Js動畫與CSS動畫區(qū)別及相應實現(xiàn)

CSS3的動畫的優(yōu)點

在性能上會稍微好一些店乐,瀏覽器會對CSS3的動畫做一些優(yōu)化

代碼相對簡單

缺點

在動畫控制上不夠靈活

兼容性不好

JavaScript的動畫正好彌補了這兩個缺點艰躺,控制能力很強,可以單幀的控制眨八、變換腺兴,同時寫得好完全可以兼容IE6,并且功能強大廉侧。對于一些復雜控制的動畫含长,使用javascript會比較靠譜。而在實現(xiàn)一些小的交互動效的時候伏穆,就多考慮考慮CSS吧

59、JS 數(shù)組和對象的遍歷方式纷纫,以及幾種方式的比較

通常我們會用循環(huán)的方式來遍歷數(shù)組枕扫。但是循環(huán)是 導致js 性能問題的原因之一。一般我們會采用下幾種方式來進行數(shù)組的遍歷

for in循環(huán)

for循環(huán)

forEach

這里的?forEach回調中兩個參數(shù)分別為?value辱魁,index

forEach?無法遍歷對象

IE不支持該方法烟瞧;Firefox?和?chrome?支持

forEach?無法使用?break诗鸭,continue?跳出循環(huán),且使用?return?是跳過本次循環(huán)

這兩種方法應該非常常見且使用很頻繁参滴。但實際上强岸,這兩種方法都存在性能問題

在方式一中,for-in需要分析出array的每個屬性砾赔,這個操作性能開銷很大蝌箍。用在?key?已知的數(shù)組上是非常不劃算的。所以盡量不要用for-in暴心,除非你不清楚要處理哪些屬性妓盲,例如?JSON對象這樣的情況

在方式2中,循環(huán)每進行一次专普,就要檢查一下數(shù)組長度悯衬。讀取屬性(數(shù)組長度)要比讀局部變量慢,尤其是當?array?里存放的都是?DOM?元素檀夹,因為每次讀取都會掃描一遍頁面上的選擇器相關元素筋粗,速度會大大降低

60、gulp是什么炸渡?

gulp是前端開發(fā)過程中一種基于流的代碼構建工具桨昙,是自動化項目的構建利器;它不僅能對網站資源進行優(yōu)化孤澎,而且在開發(fā)過程中很多重復的任務能夠使用正確的工具自動完成

Gulp的核心概念:流

流纯露,簡單來說就是建立在面向對象基礎上的一種抽象的處理數(shù)據的工具。在流中辰斋,定義了一些處理數(shù)據的基本操作策州,如讀取數(shù)據,寫入數(shù)據等宫仗,程序員是對流進行所有操作的够挂,而不用關心流的另一頭數(shù)據的真正流向

gulp正是通過流和代碼優(yōu)于配置的策略來盡量簡化任務編寫的工作

Gulp的特點:

易于使用:通過代碼優(yōu)于配置的策略,gulp 讓簡單的任務簡單藕夫,復雜的任務可管理

構建快速利用?Node.js?流的威力孽糖,你可以快速構建項目并減少頻繁的?IO?操作

易于學習通過最少的?API,掌握?gulp?毫不費力毅贮,構建工作盡在掌握:如同一系列流管道

61办悟、說一下Vue的雙向綁定數(shù)據的原理

vue.js?則是采用數(shù)據劫持結合發(fā)布者-訂閱者模式的方式,通過Object.defineProperty()來劫持各個屬性的setter滩褥,getter病蛉,在數(shù)據變動時發(fā)布消息給訂閱者,觸發(fā)相應的監(jiān)聽回調

$jQuery

1、你覺得jQuery或zepto源碼有哪些寫的好的地方

jquery源碼封裝在一個匿名函數(shù)的自執(zhí)行環(huán)境中铺然,有助于防止變量的全局污染俗孝,然后通過傳入window對象參數(shù),可以使window對象作為局部變量使用魄健,好處是當jquery中訪問window對象的時候赋铝,就不用將作用域鏈退回到頂層作用域了,從而可以更快的訪問window對象沽瘦。同樣革骨,傳入undefined參數(shù),可以縮短查找undefined時的作用域鏈

(function( window, undefined ){//用一個函數(shù)域包起來其垄,就是所謂的沙箱//在這里邊var定義的變量苛蒲,屬于這個函數(shù)域內的局部變量,避免污染全局//把當前沙箱需要的外部變量通過函數(shù)參數(shù)引入進來//只要保證參數(shù)對內提供的接口的一致性绿满,你還可以隨意替換傳進來的這個參數(shù)window.jQuery =window.$ = jQuery;? ? })(window);

jquery將一些原型屬性和方法封裝在了jquery.prototype中臂外,為了縮短名稱,又賦值給了jquery.fn喇颁,這是很形象的寫法

有一些數(shù)組或對象的方法經常能使用到漏健,jQuery將其保存為局部變量以提高訪問速度

jquery實現(xiàn)的鏈式調用可以節(jié)約代碼,所返回的都是同一個對象橘霎,可以提高代碼效率

2蔫浆、jQuery 的實現(xiàn)原理?

(function(window, undefined) {})(window);

jQuery?利用?JS?函數(shù)作用域的特性姐叁,采用立即調用表達式包裹了自身瓦盛,解決命名空間和變量污染問題

window.jQuery = window.$ = jQuery;

在閉包當中將 jQuery 和?

?暴露為全局變量

3、jQuery.fn?的?init?方法返回的?this?指的是什么對象外潜? 為什么要返回?this原环?

jQuery.fn 的 init 方法 返回的 this 就是 jQuery 對象

用戶使用 jQuery() 或 $() 即可初始化 jQuery 對象,不需要動態(tài)的去調用 init 方法

4处窥、jQuery.extend 與 jQuery.fn.extend 的區(qū)別嘱吗?

$.fn.extend()?和?$.extend()?是?jQuery?為擴展插件提拱了兩個方法

$.extend(object); // 為jQuery添加“靜態(tài)方法”(工具方法)

$.extend({min:function(a, b){returna < b ? a : b; },max:function(a, b){returna > b ? a : b; }});$.min(2,3);//? 2$.max(4,5);//? 5

$.extend([true,] targetObject, object1[, object2]); // 對targt對象進行擴展

varsettings = {validate:false,limit:5};varoptions = {validate:true,name:"bar"};$.extend(settings, options);// 注意:不支持第一個參數(shù)傳 false// settings == {validate:true, limit:5, name:"bar"}

$.fn.extend(json); // 為jQuery添加“成員函數(shù)”(實例方法)

$.fn.extend({alertValue:function(){? ? ? $(this).click(function(){? ? ? ? alert($(this).val());? ? ? });? }});$("#email").alertValue();

5、jQuery 的屬性拷貝(extend)的實現(xiàn)原理是什么滔驾,如何實現(xiàn)深拷貝谒麦?

淺拷貝(只復制一份原始對象的引用)

var newObject = $.extend({}, oldObject);

深拷貝(對原始對象屬性所引用的對象進行進行遞歸拷貝)

var newObject = $.extend(true, {}, oldObject);

6、jQuery 的隊列是如何實現(xiàn)的哆致?隊列可以用在哪些地方绕德?

jQuery 核心中有一組隊列控制方法,由?queue()/dequeue()/clearQueue()?三個方法組成摊阀。

主要應用于?animate()耻蛇,ajax剩瓶,其他要按時間順序執(zhí)行的事件中

varfunc1 =function(){alert('事件1');}varfunc2 =function(){alert('事件2');}varfunc3 =function(){alert('事件3');}varfunc4 =function(){alert('事件4');}// 入棧隊列事件$('#box').queue("queue1", func1);// push func1 to queue1$('#box').queue("queue1", func2);// push func2 to queue1// 替換隊列事件$('#box').queue("queue1", []);// delete queue1 with empty array$('#box').queue("queue1", [func3, func4]);// replace queue1// 獲取隊列事件(返回一個函數(shù)數(shù)組)$('#box').queue("queue1");// [func3(), func4()]// 出棧隊列事件并執(zhí)行$('#box').dequeue("queue1");// return func3 and do func3$('#box').dequeue("queue1");// return func4 and do func4// 清空整個隊列$('#box').clearQueue("queue1");// delete queue1 with clearQueue

7、jQuery 中的 bind(), live(), delegate(), on()的區(qū)別城丧?

bind?直接綁定在目標元素上

live?通過冒泡傳播事件,默認document上豌鹤,支持動態(tài)數(shù)據

delegate?更精確的小范圍使用事件代理亡哄,性能優(yōu)于 live

on?是最新的1.9版本整合了之前的三種方式的新事件綁定機制

8、是否知道自定義事件布疙? jQuery 里的 fire 函數(shù)是什么意思蚊惯,什么時候用?

事件即“發(fā)布/訂閱”模式灵临,自定義事件即“消息發(fā)布”截型,事件的監(jiān)聽即“訂閱訂閱”

JS 原生支持自定義事件,示例:

document.createEvent(type);// 創(chuàng)建事件event.initEvent(eventType, canBubble, prevent);// 初始化事件target.addEventListener('dataavailable', handler,false);// 監(jiān)聽事件target.dispatchEvent(e);// 觸發(fā)事件

jQuery 里的 fire 函數(shù)用于調用 jQuery 自定義事件列表中的事件

9儒溉、jQuery 通過哪個方法和 Sizzle 選擇器結合的宦焦?

Sizzle?選擇器采取?Right To Left?的匹配模式,先搜尋所有匹配標簽顿涣,再判斷它的父節(jié)點

jQuery?通過?$(selecter).find(selecter);?和?Sizzle?選擇器結合

10波闹、jQuery 中如何將數(shù)組轉化為 JSON 字符串,然后再轉化回來涛碑?

// 通過原生 JSON.stringify/JSON.parse 擴展 jQuery 實現(xiàn)$.array2json =function(array){returnJSON.stringify(array); } $.json2array =function(array){// $.parseJSON(array); // 3.0 開始精堕,已過時returnJSON.parse(array); }// 調用varjson = $.array2json(['a','b','c']);vararray = $.json2array(json);

11、jQuery 一個對象可以同時綁定多個事件蒲障,這是如何實現(xiàn)的歹篓?

$("#btn").on("mouseover mouseout", func);? $("#btn").on({mouseover: func1,mouseout: func2,click: func3? });

12、針對 jQuery 的優(yōu)化方法揉阎?

緩存頻繁操作DOM對象

盡量使用id選擇器代替class選擇器

總是從#id選擇器來繼承

盡量使用鏈式操作

使用時間委托?on綁定事件

采用jQuery的內部函數(shù)data()來存儲數(shù)據

使用最新版本的?jQuery

13庄撮、jQuery 的 slideUp 動畫,當鼠標快速連續(xù)觸發(fā), 動畫會滯后反復執(zhí)行余黎,該如何處理呢?

在觸發(fā)元素上的事件設置為延遲處理:使用?JS?原生?setTimeout?方法

在觸發(fā)元素的事件時預先停止所有的動畫重窟,再執(zhí)行相應的動畫事件:$('.tab').stop().slideUp();

14、jQuery UI 如何自定義組件惧财?

通過向?$.widget()?傳遞組件名稱和一個原型對象來完成

$.widget("ns.widgetName", [baseWidget], widgetPrototype);

15巡扇、jQuery 與 jQuery UI、jQuery Mobile 區(qū)別垮衷?

jQuery?是?JS?庫厅翔,兼容各種PC瀏覽器,主要用作更方便地處理?DOM搀突、事件刀闷、動畫、AJAX

jQuery UI?是建立在?jQuery?庫上的一組用戶界面交互、特效甸昏、小部件及主題

jQuery Mobile?以?jQuery?為基礎顽分,用于創(chuàng)建“移動Web應用”的框架

16、jQuery 和 Zepto 的區(qū)別施蜜? 各自的使用場景卒蘸?

jQuery?主要目標是PC的網頁中,兼容全部主流瀏覽器翻默。在移動設備方面缸沃,單獨推出 `jQuery Mobile

Zepto從一開始就定位移動設備,相對更輕量級修械。它的API?基本兼容jQuery`趾牧,但對PC瀏覽器兼容不理想

17、jQuery對象的特點

只有?JQuery對象才能使用?JQuery?方法

JQuery?對象是一個數(shù)組對象

$編程題

1肯污、寫一個通用的事件偵聽器函數(shù)

// event(事件)工具集翘单,來源:github.com/markyunmarkyun.Event = {// 視能力分別使用dom0||dom2||IE方式 來綁定事件// 參數(shù): 操作的元素,事件名稱 ,事件處理程序addEvent :function(element, type, handler){if(element.addEventListener) {//事件類型、需要執(zhí)行的函數(shù)仇箱、是否捕捉element.addEventListener(type, handler,false);? ? ? ? ? ? }elseif(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);? ? ? ? ? ? }elseif(element.datachEvent) {? ? ? ? ? ? ? ? element.detachEvent('on'+ type, handler);? ? ? ? ? ? }else{? ? ? ? ? ? ? ? element['on'+ type] =null;? ? ? ? ? ? }? ? ? ? },// 阻止事件 (主要是事件冒泡县恕,因為IE不支持事件捕獲)stopPropagation :function(ev){if(ev.stopPropagation) {? ? ? ? ? ? ? ? ev.stopPropagation();? ? ? ? ? ? }else{? ? ? ? ? ? ? ? ev.cancelBubble =true;? ? ? ? ? ? }? ? ? ? },// 取消事件的默認行為preventDefault :function(event){if(event.preventDefault) {? ? ? ? ? ? ? ? event.preventDefault();? ? ? ? ? ? }else{? ? ? ? ? ? ? ? event.returnValue =false;? ? ? ? ? ? }? ? ? ? },// 獲取事件目標getTarget :function(event){returnevent.target || event.srcElement;? ? ? ? }

2、如何判斷一個對象是否為數(shù)組

functionisArray(arg){if(typeofarg ==='object') {returnObject.prototype.toString.call(arg) ==='[object Array]';? ? }returnfalse;}

3剂桥、冒泡排序

每次比較相鄰的兩個數(shù)忠烛,如果后一個比前一個小,換位置

vararr = [3,1,4,6,5,7,2];functionbubbleSort(arr){for(vari =0; i < arr.length -1; i++) {for(varj =0; j < arr.length -1; j++) {if(arr[j +1] < arr[j]) {vartemp;? ? ? ? ? ? temp = arr[j];? ? ? ? ? ? arr[j] = arr[j +1];? ? ? ? ? ? arr[j +1] = temp;? ? ? ? }? ? }}returnarr;}console.log(bubbleSort(arr));

4权逗、快速排序

采用二分法美尸,取出中間數(shù),數(shù)組每次和中間數(shù)比較斟薇,小的放到左邊师坎,大的放到右邊

vararr = [3,1,4,6,5,7,2];functionquickSort(arr){if(arr.length ==0) {return[];// 返回空數(shù)組}varcIndex =Math.floor(arr.length /2);varc = arr.splice(cIndex,1);varl = [];varr = [];for(vari =0; i < arr.length; i++) {if(arr[i] < c) {? ? ? ? ? ? l.push(arr[i]);? ? ? ? }else{? ? ? ? ? ? r.push(arr[i]);? ? ? ? }? ? }returnquickSort(l).concat(c, quickSort(r));}console.log(quickSort(arr));

5、編寫一個方法 求一個字符串的字節(jié)長度

假設:一個英文字符占用一個字節(jié)堪滨,一個中文字符占用兩個字節(jié)

functionGetBytes(str){varlen = str.length;varbytes = len;for(vari=0; i255) bytes++;? ? ? ? }returnbytes;? ? }alert(GetBytes("你好,as"));

6胯陋、bind的用法,以及如何實現(xiàn)bind的函數(shù)和需要注意的點

bind的作用與call和apply相同袱箱,區(qū)別是call和apply是立即調用函數(shù)遏乔,而bind是返回了一個函數(shù),需要調用的時候再執(zhí)行发笔。

一個簡單的bind函數(shù)實現(xiàn)如下

Function.prototype.bind =function(ctx){varfn =this;returnfunction(){? ? ? ? fn.apply(ctx,arguments);? ? };};

$其他

1盟萨、談談你對重構的理解

網站重構:在不改變外部行為的前提下,簡化結構了讨、添加可讀性捻激,而在網站前端保持一致的行為制轰。也就是說是在不改變UI的情況下,對網站進行優(yōu)化胞谭, 在擴展的同時保持一致的UI

對于傳統(tǒng)的網站來說重構通常是:

表格(table)布局改為DIV+CSS

使網站前端兼容于現(xiàn)代瀏覽器(針對于不合規(guī)范的CSS垃杖、如對IE6有效的)

對于移動平臺的優(yōu)化

針對于SEO進行優(yōu)化

2、什么樣的前端代碼是好的

高復用低耦合丈屹,這樣文件小缩滨,好維護,而且好擴展泉瞻。

3、對前端工程師這個職位是怎么樣理解的苞冯?它的前景會怎么樣袖牙?

前端是最貼近用戶的程序員,比后端舅锄、數(shù)據庫鞭达、產品經理、運營皇忿、安全都近

實現(xiàn)界面交互

提升用戶體驗

有了Node.js畴蹭,前端可以實現(xiàn)服務端的一些事情

前端是最貼近用戶的程序員,前端的能力就是能讓產品從 90分進化到 100 分鳍烁,甚至更好叨襟,

與團隊成員,UI設計幔荒,產品經理的溝通糊闽;

做好的頁面結構,頁面重構和用戶體驗爹梁;

4右犹、你覺得前端工程的價值體現(xiàn)在哪

為簡化用戶使用提供技術支持(交互部分)

為多個瀏覽器兼容性提供支持

為提高用戶瀏覽速度(瀏覽器性能)提供支持

為跨平臺或者其他基于webkit或其他渲染引擎的應用提供支持

為展示數(shù)據提供支持(數(shù)據接口)

5、平時如何管理你的項目姚垃?

先期團隊必須確定好全局樣式(globe.css)念链,編碼模式(utf-8) 等;

編寫習慣必須一致(例如都是采用繼承式的寫法积糯,單樣式都寫成一行)掂墓;

標注樣式編寫人,各模塊都及時標注(標注關鍵樣式調用的地方)絮宁;

頁面進行標注(例如 頁面 模塊 開始和結束)梆暮;

CSS跟HTML?分文件夾并行存放,命名都得統(tǒng)一(例如style.css)绍昂;

JS?分文件夾存放 命名以該JS功能為準的英文翻譯啦粹。

圖片采用整合的?images.png png8?格式文件使用 - 盡量整合在一起使用方便將來的管理

人事面

面試完你還有什么問題要問的嗎

你有什么愛好?

你最大的優(yōu)點和缺點是什么?

你為什么會選擇這個行業(yè)偿荷,職位?

你覺得你適合從事這個崗位嗎?

你有什么職業(yè)規(guī)劃?

你對工資有什么要求?

如何看待前端開發(fā)?

未來三到五年的規(guī)劃是怎樣的唠椭?

常問

自我介紹

你的項目中技術難點是什么跳纳?遇到了什么問題?你是怎么解決的贪嫂?

你認為哪個項目做得最好寺庄?

最近在看哪些前端方面的書?

平時是如何學習前端開發(fā)的力崇?

你最有成就感的一件事

你是怎么學習前端的

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末斗塘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子亮靴,更是在濱河造成了極大的恐慌馍盟,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茧吊,死亡現(xiàn)場離奇詭異贞岭,居然都是意外死亡,警方通過查閱死者的電腦和手機搓侄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門瞄桨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人讶踪,你說我怎么就攤上這事芯侥。” “怎么了乳讥?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵筹麸,是天一觀的道長。 經常有香客問我雏婶,道長物赶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任留晚,我火速辦了婚禮酵紫,結果婚禮上,老公的妹妹穿的比我還像新娘错维。我一直安慰自己奖地,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布赋焕。 她就那樣靜靜地躺著参歹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隆判。 梳的紋絲不亂的頭發(fā)上犬庇,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天僧界,我揣著相機與錄音,去河邊找鬼臭挽。 笑死捂襟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的欢峰。 我是一名探鬼主播葬荷,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼纽帖!你這毒婦竟也來了宠漩?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤懊直,失蹤者是張志新(化名)和其女友劉穎哄孤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吹截,經...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年凝危,在試婚紗的時候發(fā)現(xiàn)自己被綠了波俄。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡蛾默,死狀恐怖懦铺,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情支鸡,我是刑警寧澤冬念,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站牧挣,受9級特大地震影響急前,放射性物質發(fā)生泄漏。R本人自食惡果不足惜瀑构,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一裆针、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寺晌,春花似錦世吨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至陆赋,卻和暖如春沐祷,著一層夾襖步出監(jiān)牢的瞬間嚷闭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工戈轿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凌受,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓思杯,卻偏偏與公主長得像胜蛉,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子色乾,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容