轉(zhuǎn)載自# web前端開發(fā)面試遇到的題目
1扰藕、解釋html語(yǔ)義化?
回答:用正確的標(biāo)簽做正確的事情芳撒。html語(yǔ)義化讓頁(yè)面的內(nèi)容結(jié)構(gòu)化邓深、結(jié)構(gòu)更清晰、便于對(duì)瀏覽器笔刹、搜索引擎解析芥备;
即使在沒(méi)有css樣式的情況下,也以一種文檔格式顯示舌菜,并且是容易閱讀的萌壳;
搜索引擎的爬蟲也依賴于html標(biāo)記來(lái)確定上下文和各個(gè)關(guān)鍵字的權(quán)重,利于SEO;
使閱讀代碼的人對(duì)網(wǎng)站更容易對(duì)網(wǎng)站分塊日月,便于閱讀維護(hù)理解袱瓮。
2、塊級(jí)元素與行內(nèi)元素的區(qū)別爱咬?各自有哪些擦盾?
回答:css規(guī)范規(guī)定胯究,每個(gè)元素都有一個(gè)display屬性,確定該元素的類型芍阎,如div的display默認(rèn)值為“block”杯活,則為“塊級(jí)”元素;span默認(rèn)display屬性值為“inline”蜂绎,是“行內(nèi)”元素栅表。
區(qū)別:第一:塊級(jí)元素會(huì)獨(dú)占一行,其寬度自動(dòng)填充父元素寬度师枣;行內(nèi)元素不會(huì)獨(dú)占一行怪瓶,相鄰的行內(nèi)元素會(huì)排列在一行里,直到一行拍不下践美,才會(huì)換行劳殖。
第二:塊級(jí)元素可以設(shè)置width、height拨脉,行內(nèi)元素設(shè)置無(wú)效。(塊級(jí)元素即使設(shè)置了width寬度宣增,也是獨(dú)占一行)玫膀。
第三:塊級(jí)元素可以設(shè)置margin、padding爹脾,行內(nèi)元素水平方向有效帖旨,豎直方向無(wú)效箕昭。(例如:margin-left,margin-right、padding-left解阅、padding-right有效)落竹。
塊級(jí)元素:div、ul货抄、li述召、ol、dl蟹地、dt积暖、dd、h1怪与、h2夺刑、h3、h4...p分别、table form fieldset dir-目錄列表 menu
行內(nèi)元素:a b span img strong select label sub sup textarea input
空元素:br hr img input link meta
3遍愿、DOCTYPE的作用?標(biāo)準(zhǔn)模式和兼容模式各有什么區(qū)別耘斩?為什么html5只需要寫<!doctype html>?
回答:(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ú)法工作却邓。
(3)、HTML不基于SGML院水,因此不需要對(duì)DTD進(jìn)行引用腊徙,但是需要doctype來(lái)規(guī)范瀏覽器的行為(讓瀏覽器按照他們應(yīng)該的方式來(lái)運(yùn)行);
而html4.01基于SGML檬某,所以需要對(duì)DTD進(jìn)行引用撬腾,才能告知瀏覽器文檔所使用的文檔類型。
4恢恼、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)題。
5做葵、HTML5有哪些新特性占哟?移除了哪些元素?如何處理html5新標(biāo)簽的瀏覽器兼容問(wèn)題酿矢?如何區(qū)分html和html5?
回答:(1)榨乎、h5不是SGML的子集,主要是關(guān)于圖像瘫筐、位置蜜暑、存儲(chǔ)、多任務(wù)等功能的增加策肝。
繪畫canvas肛捍;用于媒介回放的video和audio元素;語(yǔ)義化更好的內(nèi)容元素:article之众、footer拙毫、header、nav棺禾、section缀蹄;本地離線存儲(chǔ)localStorage長(zhǎng)期存儲(chǔ)數(shù)據(jù),瀏覽器關(guān)閉后數(shù)據(jù)不丟失膘婶;sessionStorage的數(shù)據(jù)在瀏覽器關(guān)閉后自動(dòng)刪除缺前;表單控件增添calendar、date悬襟、time衅码、email、url脊岳、search;新的技術(shù)Webworker,Websocket,Geolocation逝段。
(2)筛璧、移除的元素:純表現(xiàn)的元素:basefont\big\center\font\s\u;對(duì)可用性產(chǎn)生負(fù)面影響的元素:frame\frameset\noframes;
(3)、處理和html5新標(biāo)簽的瀏覽器兼容問(wèn)題:
當(dāng)在頁(yè)面中使用html5新標(biāo)簽時(shí)惹恃,可能得到三種不同的情況:
1>結(jié)果1:新標(biāo)簽被當(dāng)做錯(cuò)誤處理并且忽略,在DOM構(gòu)建時(shí)會(huì)當(dāng)作這個(gè)標(biāo)簽不存在棺牧;
2>結(jié)果2:新標(biāo)簽當(dāng)作錯(cuò)誤處理巫糙,并在DOM構(gòu)建時(shí),這個(gè)新標(biāo)簽會(huì)被構(gòu)造成行內(nèi)元素颊乘;
3>結(jié)果3:新標(biāo)簽被識(shí)別為html5標(biāo)簽参淹,然后用DOM節(jié)點(diǎn)對(duì)其進(jìn)行替換。
不能識(shí)別html5標(biāo)簽而不能使用乏悄,解決辦法如下:
1>方法1:實(shí)現(xiàn)標(biāo)簽被識(shí)別
通過(guò)document.creatElement(tagname)方法讓瀏覽器識(shí)別新標(biāo)簽浙值,瀏覽器支持標(biāo)簽后,還可以為新標(biāo)簽增添css樣式檩小。
2>方法2:javascript解決方案
a)使用html5shim:
在head中調(diào)用一下代碼:(也可以下載到自己的網(wǎng)站上進(jìn)行調(diào)用开呐,但是必須在head中)
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> </pre>
b)使用kill IE6
在</body>之前調(diào)用以下代碼:
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> <script src="http://letskillie6.googlecode.com/svn/trunk/letskillie6.zh_CN.pack.js"></script> </pre>
(4)、區(qū)分html和html5:doctype聲明规求、新增的結(jié)構(gòu)元素|功能元素筐付。
6、css選擇符阻肿??jī)?yōu)先級(jí)算法瓦戚?哪些屬性可以繼承?
回答:(1)丛塌、id選擇器较解;(2)、類選擇器赴邻;(3)印衔、標(biāo)簽選擇器;(4)乍楚、相鄰選擇器(h1+p);(5)当编、子選擇器(ul>li);(6)、后代選擇器(li a)徒溪;(7)忿偷、通配符選擇器(*);(8)臊泌、屬性選擇器(a[rel="external"]);(9)鲤桥、偽類選擇器(a:hover);
可繼承的屬性:font-size/font-family/color/UL LI Dl DD DT;
不可繼承的樣式:border/margin/padding/height/width/display/position/float/left...;
優(yōu)先級(jí):!important>id>class>tag>*; !important比內(nèi)聯(lián)優(yōu)先級(jí)高渠概;內(nèi)聯(lián)樣式表(標(biāo)簽內(nèi)部)>嵌入樣式表(當(dāng)前文件中)>外部樣式表(外部文件中)
7茶凳、描述cookies,sessionStorage,localStorage的區(qū)別嫂拴?
回答:(1)、cookie是網(wǎng)站用于標(biāo)識(shí)用戶的身份而儲(chǔ)存在用戶本地終端(client side)上的數(shù)據(jù)(通常經(jīng)過(guò)加密)贮喧;cookie數(shù)據(jù)始終在同源的http中攜帶(即使不需要)筒狠,即會(huì)在瀏覽器和服務(wù)器間來(lái)回傳遞;(2)箱沦、sessionStorage和localStorage不會(huì)自動(dòng)把數(shù)據(jù)發(fā)給服務(wù)器辩恼,僅在本地保存。
(3)谓形、存儲(chǔ)大性钜痢:cookie數(shù)據(jù)大小不能超過(guò)4k;sessionStorage和localStorage雖然也有存儲(chǔ)大小的限制,但比cookie大得多寒跳,可以達(dá)到5M或更大聘萨。
(4)、有效時(shí)間:localStorage存儲(chǔ)持久數(shù)據(jù)童太,瀏覽器關(guān)閉后數(shù)據(jù)不丟失除非主動(dòng)刪除數(shù)據(jù)米辐;
sessionStorage數(shù)據(jù)在當(dāng)前瀏覽器關(guān)閉后刪除;
cookie 設(shè)置的cookie過(guò)期時(shí)間之前一直有效康愤,即使窗口或者瀏覽器關(guān)閉儡循。
8、javascript有幾種數(shù)據(jù)類型征冷?劃一下他們的內(nèi)存圖择膝?
回答: 棧:原始數(shù)據(jù)類型(number、string检激、Boolean肴捉、null、undefined);
堆:引用數(shù)據(jù)類型(對(duì)象叔收、數(shù)組齿穗、和函數(shù));
兩種類型的區(qū)別:存儲(chǔ)位置不同:原始數(shù)據(jù)類型存儲(chǔ)在棧中的簡(jiǎn)單數(shù)據(jù)段饺律,占據(jù)空間小窃页,大小固定,屬于被頻繁使用數(shù)據(jù)复濒,所以放入棧中存儲(chǔ)脖卖;
引用數(shù)據(jù)類型存儲(chǔ)在堆中的對(duì)象,占據(jù)空間大巧颈,大小不固定畦木。如果存儲(chǔ)在棧中將會(huì)影響程序運(yùn)行的性能;引用數(shù)據(jù)類型在棧中存儲(chǔ)了指針砸泛,該指針指向堆中該實(shí)體的起始地址十籍。當(dāng)解釋器尋找引用值時(shí)蛆封,會(huì)首先檢索其在棧中的地址,取得地址后從堆中獲得實(shí)體勾栗。9惨篱、href和src的區(qū)別?
回答:(1)围俘、href表示超文本引用妒蛇,用于建立當(dāng)前元素和文檔之間的鏈接。常用的有l(wèi)ink楷拳、a上使用,當(dāng)前文檔和引用資源之間確立聯(lián)系吏奸,并行下載資源欢揖。
(2)、src是sourse的縮寫奋蔚,src指向的文檔會(huì)嵌入到文檔中當(dāng)前標(biāo)簽所在的位置她混。主要是引入,常用與img,script等元素上泊碑,替換當(dāng)前元素坤按,當(dāng)瀏覽器解析該元素時(shí),會(huì)暫停其他資源的下載和處理馒过,直到完畢臭脓。
10、javascript中call()和apply()方法的區(qū)別腹忽?
回答:ECMAScript規(guī)范給所有函數(shù)都定義了這兩個(gè)方法call()和apply()来累。
call()方法定義:調(diào)用一個(gè)對(duì)象的一個(gè)方法,以另一個(gè)對(duì)象替換當(dāng)前對(duì)象窘奏。
apply()方法定義:應(yīng)用某一對(duì)象的一個(gè)方法嘹锁,用另一個(gè)對(duì)象替換當(dāng)前對(duì)象。
兩者的區(qū)別在與參數(shù):call()和apply()的第一個(gè)參數(shù)都是要調(diào)用的函數(shù)的對(duì)象着裹,call()的剩余參數(shù)是傳遞給要調(diào)用的函數(shù)的值领猾,而apply()只有兩個(gè)參數(shù),第一個(gè)是對(duì)象骇扇,第二個(gè)是數(shù)組摔竿,這個(gè)數(shù)組就是該函數(shù)的參數(shù)。
11匠题、javascript原型拯坟?原型鏈?以及如何實(shí)現(xià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í)現(xiàn)繼承:
1》構(gòu)造繼承:比如:現(xiàn)在有一個(gè)”動(dòng)物“對(duì)象的構(gòu)造函數(shù)
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> function Animal(){this.species = "動(dòng)物";
}</pre>
還有一個(gè)”貓“對(duì)象的構(gòu)造函數(shù)
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> function Cat(name,color){this.name = name;this.color = color;
}</pre>
”貓“繼承”動(dòng)物“
構(gòu)造函數(shù)綁定:使用call()或者apply()方法,將父對(duì)象的構(gòu)造函數(shù)綁定在子對(duì)象上冗恨,即在子對(duì)象構(gòu)造函數(shù)中加一行:
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> function Cat(name,color){
Animal.apply(this, arguments);
this.name = name;this.color = color;
}var cat1 = new Cat("大毛","黃色");
alert(cat1.species); // 動(dòng)物</pre>
](javascript:void(0); "復(fù)制代碼")
2》原型繼承:如果”貓“的prototype對(duì)象答憔,指向一個(gè)animal的實(shí)例,那么所有貓的實(shí)例就可以繼承animal了掀抹。
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> Cat.prototype = new Animal();
Cat.prototype.constructor = Cat;var cat1 = new Cat("大毛","黃色");
alert(cat1.species); // 動(dòng)物</pre>
3》實(shí)例繼承:
4》拷貝繼承:
原型prototype機(jī)制或apply和call方法去實(shí)現(xiàn)比較簡(jiǎn)單虐拓,建議使用構(gòu)造方式和原型混合方式。
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> 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);//得到被繼承的屬性</pre>
[](javascript:void(0); "復(fù)制代碼")
12蓉驹、前端性能優(yōu)化的方法?
回答:(1)揪利、當(dāng)需要設(shè)置的樣式很多時(shí)設(shè)置className而不是直接操作style态兴。
(2)、避免在頁(yè)面的主題布局中使用table疟位,table要等其中的內(nèi)容完全下載之后才會(huì)顯示出來(lái)瞻润,顯示比div+css布局慢。
(3)甜刻、用innerHTML代替DOM操作敢订,減少DOM操作次數(shù),優(yōu)化javascript性能罢吃。
(4)楚午、減少http請(qǐng)求次數(shù):CSS Sprites,JS尿招、CSS源碼壓縮矾柜,圖片大小控制合適;網(wǎng)頁(yè)GZIP壓縮就谜,CDN托管怪蔑,data緩存,圖片服務(wù)器丧荐。
(5)缆瓣、圖片預(yù)加載,將樣式表放在頂部虹统,將腳本放在底部弓坞,加上時(shí)間戳合冀。
(6)府阀、前端模板 JS+數(shù)據(jù)掩宜,減少由于html標(biāo)簽導(dǎo)致的貸款浪費(fèi)旦事,前端用變量保存AJAX請(qǐng)求結(jié)果,每次操作本地?cái)?shù)據(jù)族吻,減少請(qǐng)求次數(shù)帽借。
(7)、少用全局變量超歌,緩存DOM節(jié)點(diǎn)查找的結(jié)果砍艾。減少IO(輸入/輸出)讀取操作。
(8)巍举、避免使用CSS Expression(css 表達(dá)式)又稱動(dòng)態(tài)屬性(Dynamic properties)辐董。
(9)、減少DOM操作禀综;部署前,圖片壓縮苔严、代碼壓縮定枷;優(yōu)化js代碼結(jié)構(gòu),減少冗余代碼届氢;減少http請(qǐng)求欠窒,合理設(shè)置http緩存;使用內(nèi)容分發(fā)cdn加速退子;靜態(tài)資源緩存岖妄;圖片延遲加載;
13寂祥、介紹一下標(biāo)準(zhǔn)的CSS的盒子模型荐虐?低版本的IE的盒子模型有什么不同?
回答:(1)丸凭、有兩種:IE盒子模型福扬、w3c盒子模型;(2)惜犀、盒模型:content(內(nèi)容)铛碑、padding(內(nèi)邊距)、margin(外邊距)虽界、 border(邊框)汽烦;(3):區(qū)別:IE的content把padding和border計(jì)算了進(jìn)去。
14莉御、如何居中div?
回答:(1)撇吞、水平居中:給DIV設(shè)置一個(gè)寬度俗冻,然后添加margin:0 auto屬性。
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> div{ width:200px; margin:0 auto;
}</pre>
(2)梢夯、讓絕對(duì)定位的div居中:
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">div { position: absolute; width: 300px; height: 300px; margin: auto; top: 0; left: 0; bottom: 0; right: 0; background-color: pink; /* 方便看效果 */
}</pre>
](javascript:void(0); "復(fù)制代碼")
(3)言疗、水平垂直居中一:
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> 確定容器的寬高 寬500 高 300 的層
設(shè)置層的外邊距
div { position: relative; /* 相對(duì)定位或絕對(duì)定位均可 / width:500px; height:300px; top: 50%; left: 50%; margin: -150px 0 0 -250px; / 外邊距為自身寬高的一半 / background-color: pink; / 方便看效果 */
}</pre>
[](javascript:void(0); "復(fù)制代碼")
(4)、水平垂直居中二:
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> 未知容器的寬高颂砸,利用 transform
屬性
div { position: absolute; /* 相對(duì)定位或絕對(duì)定位均可 / width:500px; height:300px; top: 50%; left: 50%; transform: translate(-50%, -50%); background-color: pink; / 方便看效果 */
}</pre>
[](javascript:void(0); "復(fù)制代碼")
(5)噪奄、水平垂直居中三:
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> 利用 flex 布局
實(shí)際使用時(shí)應(yīng)考慮兼容性
.container { display: flex; align-items: center; /* 垂直居中 / justify-content: center; / 水平居中 */
} .container div { width: 100px; height: 100px; background-color: pink; /* 方便看效果 */
} </pre>
](javascript:void(0); "復(fù)制代碼")
15、position的值定位原點(diǎn)是人乓?
回答:(1)勤篮、absolute:生成絕對(duì)定位的元素,相對(duì)于值不為static的第一個(gè)父元素進(jìn)行定位色罚。
(2)碰缔、relative:生成相對(duì)定位的元素,相對(duì)于元素正常位置進(jìn)行定位戳护。
(3)金抡、fixed(老IE不支持):生成絕對(duì)定位的元素,相對(duì)于瀏覽器窗口進(jìn)行定位腌且。
(4)梗肝、static:默認(rèn)值,沒(méi)有定位铺董,元素出現(xiàn)在正常的流中巫击。
(5)、inherit:規(guī)定從父元素繼承position的值精续。
16:清除浮動(dòng)的幾種方式坝锰?為什么要清除浮動(dòng)呢?
回答:(1)重付、添加新的元素顷级,應(yīng)用clear:both;(額外標(biāo)簽法)
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">.clear{clear:both; height: 0; line-height: 0; font-size: 0}</pre>
(2)、父級(jí)div定義overflow:auto;
(3)确垫、使用:after方法愕把,作用與浮動(dòng)元素的父元素。(偽元素)
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> .clearfix:after{ content:"";//設(shè)置內(nèi)容為空
height:0;//高度為0
line-height:0;//行高為0
display:block;//將文本轉(zhuǎn)為塊級(jí)元素
visibility:hidden;//將元素隱藏
clear:both//清除浮動(dòng)
} .clearfix{ zoom:1;為了兼容IE(觸發(fā)IE的haslayout屬性)
}</pre>
](javascript:void(0); "復(fù)制代碼")
(4)森爽、使用雙偽元素
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">.clearfix:before,.clearfix:after { content: ""; display: block; clear: both;
} .clearfix { zoom: 1;
}</pre>
[](javascript:void(0); "復(fù)制代碼")
原因:如果一個(gè)盒子中有一個(gè)子盒子恨豁,并且父盒子沒(méi)有設(shè)置高,子盒子在父盒子中設(shè)置了浮動(dòng)爬迟,那么將來(lái)父盒子的高度就是0橘蜜,下面的元素就會(huì)自動(dòng)部位。(所以可以給父級(jí)DIV定義height;也可以父級(jí)DIV一起浮動(dòng))计福。
(當(dāng)設(shè)置了zoom的值之后跌捆,所設(shè)置的元素就會(huì)就會(huì)擴(kuò)大或者縮小,高度寬度就會(huì)重新計(jì)算了象颖,這里一旦改變zoom值時(shí)其實(shí)也會(huì)發(fā)生重新渲染佩厚,運(yùn)用這個(gè)原理,也就解決了ie下子元素浮動(dòng)時(shí)候父元素不隨著自動(dòng)擴(kuò)大的問(wèn)題说订。
)
17抄瓦、css定義的權(quán)重?
回答:權(quán)重的規(guī)則:標(biāo)簽的權(quán)重為1陶冷,class的權(quán)重為10钙姊,id的權(quán)重為100,如下所示:(ps:如果權(quán)重相同埂伦,則最后定義的樣式會(huì)起作用煞额,但是要避免這樣的情況)
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;">/權(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{
}</pre>
](javascript:void(0); "復(fù)制代碼")
18、javascript作用域和閉包沾谜?
回答:變量作用域:包括全局變量和局部變量(函數(shù)內(nèi)部可以直接讀取全局變量&函數(shù)外部自然不能讀取函數(shù)內(nèi)部的局部變量)膊毁。
(1)、函數(shù)作用域:函數(shù)的局部變量?jī)H對(duì)函數(shù)內(nèi)部可見基跑。
(2)婚温、詞法作用域:函數(shù)的嵌套關(guān)系是定義的時(shí)候決定的,而不是調(diào)用的時(shí)候決定的涩僻,即嵌套關(guān)系是詞法分析時(shí)確定的,而非運(yùn)行時(shí)決定栈顷。
(3)逆日、全局作用域:在最外層定義的變量,全局對(duì)象的變量萄凤,任何地方隱匿定義的變量室抽。
(4)、沒(méi)有塊級(jí)作用域靡努。
閉包:就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)坪圾。也可以理解成”定義在一個(gè)函數(shù)內(nèi)部的函數(shù)”;
閉包的用途就是一可以讀取函數(shù)內(nèi)部的變量惑朦,二就是讓這些變量的值始終保存在內(nèi)存中兽泄。(內(nèi)存會(huì)消耗過(guò)大,所以不能濫用閉包)漾月。
簡(jiǎn)單的閉包例子:
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"> function f1(){var n=999;
function f2(){
alert(n);
}return f2;
}var result=f1();
result(); // 999</pre>
](javascript:void(0); "復(fù)制代碼")
19病梢、AJAX的步驟?
回答:(1)、創(chuàng)建ajax對(duì)象蜓陌;(2)觅彰、發(fā)出HTTP請(qǐng)求;(3)钮热、接收服務(wù)器傳回的數(shù)據(jù)填抬;(4)、更新網(wǎng)頁(yè)數(shù)據(jù)隧期。
20飒责、一個(gè)頁(yè)面上兩個(gè)div左右鋪滿整個(gè)瀏覽器,要保證左邊的div一直為100px厌秒,右邊的div跟隨瀏覽器大小變化(比如瀏覽器為500读拆,右邊就為400;如果瀏覽器為900鸵闪,右邊為800)檐晕?
回答:(1)、浮動(dòng)布局:
[](javascript:void(0); "復(fù)制代碼")
<pre style="margin-top: 0px; margin-bottom: 0px; white-space: pre-wrap; overflow-wrap: break-word; font-family: "Courier New" !important; font-size: 12px !important;"><div id="left">left sidebar</div>
<div id="content">Main Content</div>
<style type="text/css"> *{ margin: 0; padding: 0;
} #left{ float: left; width: 220px; background-color: green;
} #content{ background-color: orange; margin-left: 220px;
}
</style></pre>
](javascript:void(0); "復(fù)制代碼")
21蚌讼、一個(gè)頁(yè)面從輸入U(xiǎn)RL到頁(yè)面加載顯示完成辟灰,這個(gè)過(guò)程發(fā)生了什么?(流程說(shuō)的越詳細(xì)越好)
回答:輸入地址
(1)篡石、瀏覽器查找域名的IP地址芥喇,這一步包括DNS具體的查找過(guò)程(包括:瀏覽器緩存-》系統(tǒng)緩存-》路由器緩存...)(2)、瀏覽器向web服務(wù)器發(fā)送一個(gè)HTTP請(qǐng)求凰萨;(3)继控、服務(wù)器的永久重定向響應(yīng)(從http://example.com到http://www.example.com);(5)胖眷、瀏覽器跟蹤重定向地址武通;(6)、服務(wù)器處理請(qǐng)求珊搀;(7)冶忱、服務(wù)器返回一個(gè)HTTP響應(yīng);(8)境析、瀏覽器顯示HTML囚枪;(9)、瀏覽器發(fā)送請(qǐng)求獲取嵌入在HTML中的 資源(如圖片劳淆、音頻链沼、視頻、css沛鸵、js等等)忆植;(10)、瀏覽器發(fā)送異步請(qǐng)求。
22朝刊、JS跨域請(qǐng)求的方式耀里,能寫幾種寫幾種?
回答:(1)、通過(guò)jsonp跨域拾氓;
(2)冯挎、通過(guò)修改document.domain來(lái)跨子域;
(3)咙鞍、使用window.name來(lái)進(jìn)行跨域房官;
(4)、使用HTML5新引進(jìn)的window.postMessage方法來(lái)進(jìn)行跨域(ie6 7不支持)续滋;
(5)翰守、CORS需要服務(wù)器設(shè)置header:Access-Control-Allow-Origin;
(6)疲酌、nginx反向代理 這個(gè)方法可以不用目標(biāo)服務(wù)器配合蜡峰,不過(guò)需要搭建一個(gè)中轉(zhuǎn)nginx服務(wù)器,用于轉(zhuǎn)發(fā)請(qǐng)求朗恳。