十個(gè)前端面試題及答案

前端面試題:

第一道:如何實(shí)現(xiàn)盒子邊框圓角及陰影效果?

1用border-radius 屬性是一個(gè)簡(jiǎn)寫(xiě)屬性,用于設(shè)置四個(gè) border-*-radius 屬性。

提示:該屬性允許您為元素添加圓角邊框!

可以分開(kāi)設(shè)置,如果四邊角度一樣就可以省略,直接寫(xiě)角度即可。

2 用box-shadow(sha`dang)是css3的一個(gè)新屬性,用來(lái)實(shí)現(xiàn)陰影效果,陰影分為內(nèi)陰影和外陰影兩個(gè)效果,可以通過(guò)逗號(hào)添加多個(gè)陰影效果。


<style>

.rect?{

border: 1px?solid?red;

height: 100px;

width: 200px;

border-radius: 10px;

box-shadow: 4px?4px?5px?rgba(0, 0, 0, 0.5)

}

</style>

</head>


<body>

<div?class="rect"></div>

效果如上:


?

?

?

第二道:

[if !supportLists]·?[endif]什么是閉包,閉包的用途是什么?

答案


在函數(shù)內(nèi)部調(diào)用函數(shù)外部的變量,那這個(gè)變量與這個(gè)函數(shù)稱(chēng)為閉包。

<<script>

function?f1() {

var?a?= 1

function?f2() {

console.log(a)

}

return?f2

} var?result?= f1()

result() // 1

</script>



上面的代碼中函數(shù)f2內(nèi)部調(diào)用了函數(shù)外部的變量a,故函數(shù)f2與變量a形成了閉包。最后將f2與變量a封裝成函數(shù)f1,便可以在外部讀取到函數(shù)f1內(nèi)聲明的變量,避免了污染全局變量。閉包的作用:1)可以讀取函數(shù)內(nèi)部聲明的變量,避免污染全局變量;2)讓函數(shù)內(nèi)聲明變量的值一直保存在內(nèi)存之中。

包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。由于在Javascript語(yǔ)言中,只有函數(shù)內(nèi)部的子函數(shù)才能讀取局部變量,因此可以把閉包簡(jiǎn)單理解成“定義在一個(gè)函數(shù)內(nèi)部的函數(shù)”。

所以,在本質(zhì)上,閉包就是將函數(shù)內(nèi)部和函數(shù)外部連接起來(lái)的一座橋梁。閉包可以用在許多地方。它的最大用處有兩個(gè),一個(gè)是前面提到的可以讀取函數(shù)內(nèi)部的變量,另一個(gè)就是讓這些變量的值始終保持在內(nèi)存中。


閉包有三個(gè)特性:

1.函數(shù)嵌套函數(shù)?2.函數(shù)內(nèi)部可以引用外部的參數(shù)和變量?。3.參數(shù)和變量不會(huì)被垃圾回收機(jī)制回收。


第三道:

請(qǐng)說(shuō)出至少8個(gè) HTTP 狀態(tài)碼,并描述各狀態(tài)碼的意義。例如:狀態(tài)碼200表示響應(yīng)成功;

一般情況下:

[if !supportLists]1.?[endif]狀態(tài)碼201表示創(chuàng)建成功2.狀態(tài)碼300表示多種選擇3.狀態(tài)碼301表示永久移動(dòng)4.狀態(tài)碼302表示臨時(shí)移動(dòng)5.狀態(tài)碼400表示用戶(hù)請(qǐng)求語(yǔ)法錯(cuò)誤6.狀態(tài)碼404表示服務(wù)器找不到用戶(hù)請(qǐng)求的網(wǎng)頁(yè)7.狀態(tài)碼500表示服務(wù)器內(nèi)部錯(cuò)誤,無(wú)法完成請(qǐng)求8.狀態(tài)碼502表示服務(wù)器未打開(kāi)

2開(kāi)頭 (請(qǐng)求成功)表示成功處理了請(qǐng)求的狀態(tài)代碼。

3開(kāi)頭 (請(qǐng)求被重定向)表示要完成請(qǐng)求,需要進(jìn)一步操作。 通常,這些狀態(tài)代碼用來(lái)重定向。(重定向的意思一般就是指換網(wǎng)站了或者說(shuō)網(wǎng)站沒(méi)了比如有的網(wǎng)站看著看著就被封了,或者轉(zhuǎn)成廣告正經(jīng)網(wǎng)站不受美利堅(jiān)保護(hù)了。

4開(kāi)頭 (請(qǐng)求錯(cuò)誤)這些狀態(tài)代碼表示請(qǐng)求可能出錯(cuò),妨礙了服務(wù)器的處理。

5開(kāi)頭(服務(wù)器錯(cuò)誤)這些狀態(tài)代碼表示服務(wù)器在嘗試處理請(qǐng)求時(shí)發(fā)生內(nèi)部錯(cuò)誤。 這些錯(cuò)誤可能是服務(wù)器本身的錯(cuò)誤,而不是請(qǐng)求出錯(cuò)。5開(kāi)頭碼一般不常見(jiàn),了解一下知道就好了

第四道:

闡述清浮動(dòng)的幾種方式

1.父級(jí)div定義 height

原理:父級(jí)div手動(dòng)定義height,就解決了父級(jí)div無(wú)法自動(dòng)獲取到高度的問(wèn)題。

優(yōu)點(diǎn):簡(jiǎn)單、代碼少、容易掌握

缺點(diǎn):只適合高度固定的布局,要給出精確的高度,如果高度和父級(jí)div不一樣時(shí),會(huì)產(chǎn)生問(wèn)題


2.父級(jí)div定義 overflow:hidden

原理:必須定義width或zoom:1,同時(shí)不能定義height,使用overflow:hidden時(shí),瀏覽器會(huì)自動(dòng)檢查浮動(dòng)區(qū)域的高度

優(yōu)點(diǎn):簡(jiǎn)單、代碼少、瀏覽器支持好

[if !supportLists]3.?[endif]在盒子中增加一個(gè).clearfix::;

原理:添加一個(gè)空div,利用css提高的clearfix::清除浮動(dòng),讓父級(jí)div能自動(dòng)獲取到高度

優(yōu)點(diǎn):簡(jiǎn)單、代碼少、瀏覽器支持好、不容易出現(xiàn)怪問(wèn)題

缺點(diǎn):不少初學(xué)者不理解原理;如果頁(yè)面浮動(dòng)布局多,就要增加很多空div,讓人感覺(jué)很不好

第五道

編寫(xiě)一個(gè)方法去掉數(shù)組里面重復(fù)的內(nèi)容var arr=[1,2,3,4,5,1,2,3]

一個(gè)數(shù)組去重的簡(jiǎn)單實(shí)現(xiàn)

<script>

var?arr?= [1,2,3,4,5,1,2,3]

//定義一個(gè)新的數(shù)組

var?s?= [];

//遍歷數(shù)組

for?(var?i?= 0; i?< arr.length; i++) {


if?(s.indexOf(arr[i]) == -1) { ?//判斷在s數(shù)組中是否存在,不存在則push到s數(shù)組中

s.push(arr[i]);

}

}

console.log(s);//12345

</script>


















第六題undefined和 null 區(qū)別


null: Null類(lèi)型,代表“空值”,代表一個(gè)空對(duì)象指針,使用typeof運(yùn)算得到 “object”,所以可以認(rèn)為它是一個(gè)特殊的對(duì)象值。


undefined: Undefined類(lèi)型,當(dāng)一個(gè)聲明了一個(gè)變量未初始化時(shí),得到的就是undefined。


javaScript權(quán)威指南: null 和 undefined 都表示“值的空缺”,可以認(rèn)為undefined是表示系統(tǒng)級(jí)的、出乎意料的或類(lèi)似錯(cuò)誤的值的空缺,而null是表示程序級(jí)的、正常的或在意料之中的值的空缺。


第七題:

講幾種簡(jiǎn)單布局,例如左邊固定寬度右邊自由,或者中間固定兩邊自由寬度。

?float方法(兩邊固定中間自由伸縮):

通過(guò)使兩邊的div左右浮動(dòng),脫離文檔流,再為中間的div設(shè)置margin-left,margin-right值為左右div的寬度即可.中間的寬度設(shè)置為百分百。(缺點(diǎn)時(shí)div的排列要把中間的放在最下面)

<body>

<div?class="left">我最左邊的</div>

<!-- <div class="center">我是中間的</div>錯(cuò)誤 -->

<div?class="right">我最右邊的</div>

<div?class="center">我是中間的</div><!--正確-->

</body>













flex方法(中間固定兩邊自由伸縮)一般用于手機(jī)端布局

<style>

.wrap?{

display: flex;佛萊克斯

flex-direction: row;/* 讓容器內(nèi)盒子水平顯示*/?刀軟可腎

}

.center?{

width: 800px;

background: gold;

}

.left,

.right?{

/*flex-grow 屬性用于平均分享父盒子剩余空間。*/

flex-grow: 1;

height: 30px;

background: red;

}

</style>

</head>

<body>

<div?class="wrap">

<div?class="left">左邊</div>

<div?class="center">中間</div>

<div?class="right">右邊</div>

</div>



第八題

[if !supportLists]1.?[endif]jQuery庫(kù)中的 $() 是什么?


$()函數(shù)是 jQuery() 函數(shù)的別稱(chēng),乍一看這很怪異,還使 jQuery 代碼晦澀難懂。其實(shí)非常好理解。$()函數(shù)用于將任何對(duì)象包裹成 jQuery 對(duì)象,接著你就被允許調(diào)用定義在 jQuery 對(duì)象上的多個(gè)不同方法。甚至可以將一個(gè)選擇器字符串傳入 $() 函數(shù),它會(huì)返回一個(gè)包含所有匹配的 DOM 元素?cái)?shù)組的 jQuery 對(duì)象。這個(gè)問(wèn)題我已經(jīng)見(jiàn)過(guò)好幾次被提及,盡管它非常基礎(chǔ),它經(jīng)常被用來(lái)區(qū)分一個(gè)開(kāi)發(fā)人員是否了解 jQuery。





第九題

Js中的事件冒泡和事件委托

1.事件冒泡:


通俗易懂的來(lái)講,就是當(dāng)一個(gè)子元素的事件被觸發(fā)的時(shí)候(如onclick事件),該事件會(huì)從事件源(被點(diǎn)擊的子元素)開(kāi)始逐級(jí)向上傳播,觸發(fā)父級(jí)元素的點(diǎn)擊事件。


2.事件委托


事件委托,首先按字面的意思就能看你出來(lái),是將事件交由別人來(lái)執(zhí)行,再聯(lián)想到上面講的事件冒泡,就是將子元素的事件通過(guò)冒泡的形式交由父元素來(lái)執(zhí)行。


JS事件流原理圖如下:畫(huà)圖舉例


由此可以知道  1、一個(gè)完整的JS事件流是從window開(kāi)始,最后回到window的一個(gè)過(guò)程  2、事件流被分為三個(gè)階段(1~5)捕獲過(guò)程、(5~6)目標(biāo)過(guò)程、(6~10)冒泡過(guò)程






第十題

簡(jiǎn)述ajax的優(yōu)缺點(diǎn)

  優(yōu)點(diǎn):

  1)無(wú)刷新更新數(shù)據(jù)(在不刷新整個(gè)頁(yè)面的情況下維持與服務(wù)器通信)

  2)異步與服務(wù)器通信(使用異步的方式與服務(wù)器通信,不打斷用戶(hù)的操作)

  3)前端和后端負(fù)載均衡(將一些后端的工作交給前端,減少服務(wù)器的負(fù)擔(dān))

  4)界面和應(yīng)用相分離(ajax將界面和應(yīng)用分離也就是數(shù)據(jù)與呈現(xiàn)相分離)

  缺點(diǎn):

  1)ajax不支持瀏覽器back按鈕

  2)安全問(wèn)題 Aajax暴露了與服務(wù)器交互的細(xì)節(jié)

3)對(duì)搜索引擎的支持比較弱



簡(jiǎn)述原型鏈

這些原型對(duì)象都像鏈條一樣連接在一起,所以我們把這種形式叫做原型鏈

原型鏈最主要的作用是繼承。只要是在原型鏈上的屬性和方法,這個(gè)對(duì)象都能用

訪問(wèn)規(guī)則:

先看自己對(duì)象里有沒(méi)有,有拿來(lái)用,沒(méi)有找自己的原型,原型有拿來(lái)用,沒(méi)有,再找原型的原型,有拿來(lái)用,沒(méi)有繼續(xù)找

直到找到null,都還沒(méi)有,就返回undefined



圖解原型鏈:


?

?

Constructor康死狀克特 ??prototype 普特太仆 ??

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標(biāo)準(zhǔn)。 注意:講述HT...
    kismetajun閱讀 28,818評(píng)論 1 45
  • 請(qǐng)參看我github中的wiki,不定期更新。https://github.com/ivonzhang/Front...
    zhangivon閱讀 7,771評(píng)論 2 19
  • 前端開(kāi)發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門(mén)級(jí)到專(zhuān)家級(jí),廣度和深度都會(huì)有所增加。 題目類(lèi)型: 理論知...
    怡寶丶閱讀 2,686評(píng)論 0 7
  • 概要 64學(xué)時(shí) 3.5學(xué)分 章節(jié)安排 電子商務(wù)網(wǎng)站概況 HTML5+CSS3 JavaScript Node 電子...
    阿啊阿吖丁閱讀 9,851評(píng)論 0 3
  • 1.幾種基本數(shù)據(jù)類(lèi)型?復(fù)雜數(shù)據(jù)類(lèi)型?值類(lèi)型和引用數(shù)據(jù)類(lèi)型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類(lèi)型:Undefined、Nul...
    極樂(lè)君閱讀 5,878評(píng)論 0 106

友情鏈接更多精彩內(nèi)容