html测试大题代码,Html5+js测试题(示例代码)
Html5+js測(cè)試題
==============================================
1.談?wù)勀銓?duì)js閉包的理解:
閉包是一個(gè)比較抽象的概念,尤其是對(duì)js新手來說.書上的解釋實(shí)在是比較晦澀,對(duì)我來說也是一樣.
但是他也是js能力提升中無法繞過的一環(huán),幾乎每次面試必問的問題,因?yàn)樵诨卮鸬臅r(shí)候.你的答案的深度,對(duì)術(shù)語的理解以及js內(nèi)部解釋器的運(yùn)作方式的描述,都是可以看出你js實(shí)際水平的.即使你沒答對(duì),也能讓考官對(duì)你的水平有個(gè)評(píng)估.那么我先來說說我對(duì)js中的閉包的理解.
閉包是很多語言都具備的特性,在js中,閉包主要涉及到j(luò)s的幾個(gè)其他的特性:作用域鏈,垃圾(內(nèi)存)回收機(jī)制,函數(shù)嵌套,等等.
在理解閉包以前.最好能先理解一下作用域鏈的含義,簡(jiǎn)單來說,作用域鏈就是函數(shù)在定義的時(shí)候創(chuàng)建的,用于尋找使用到的變量的值的一個(gè)索引,而他內(nèi)部的規(guī)則是,把函數(shù)自身的本地變量放在最前面,把自身的父級(jí)函數(shù)中的變量放在其次,把再高一級(jí)函數(shù)中的變量放在更后面,以此類推直至全局對(duì)象為止.當(dāng)函數(shù)中需要查詢一個(gè)變量的值的時(shí)候,js解釋器會(huì)去作用域鏈去查找,從最前面的本地變量中先找,如果沒有找到對(duì)應(yīng)的變量,則到下一級(jí)的鏈上找,一旦找到了變量,則不再繼續(xù).如果找到最后也沒找到需要的變量,則解釋器返回undefined.
了解了作用域鏈,我們?cè)賮砜纯磈s的內(nèi)存回收機(jī)制,一般來說,一個(gè)函數(shù)在執(zhí)行開始的時(shí)候,會(huì)給其中定義的變量劃分內(nèi)存空間保存,以備后面的語句所用,等到函數(shù)執(zhí)行完畢返回了,這些變量就被認(rèn)為是無用的了.對(duì)應(yīng)的內(nèi)存空間也就被回收了.下次再執(zhí)行此函數(shù)的時(shí)候,所有的變量又回到最初的狀態(tài),重新賦值使用.但是如果這個(gè)函數(shù)內(nèi)部又嵌套了另一個(gè)函數(shù),而這個(gè)函數(shù)是有可能在外部被調(diào)用到的.并且這個(gè)內(nèi)部函數(shù)又使用了外部函數(shù)的某些變量的話.這種內(nèi)存回收機(jī)制就會(huì)出現(xiàn)問題.如果在外部函數(shù)返回后,又直接調(diào)用了內(nèi)部函數(shù),那么內(nèi)部函數(shù)就無法讀取到他所需要的外部函數(shù)中變量的值了.所以js解釋器在遇到函數(shù)定義的時(shí)候,會(huì)自動(dòng)把函數(shù)和他可能使用的變量(包括本地變量和父級(jí)和祖先級(jí)函數(shù)的變量(自由變量))一起保存起來.也就是構(gòu)建一個(gè)閉包,這些變量將不會(huì)被內(nèi)存回收器所回收,只有當(dāng)內(nèi)部的函數(shù)不可能被調(diào)用以后(例如被刪除了,或者沒有了指針),才會(huì)銷毀這個(gè)閉包,而沒有任何一個(gè)閉包引用的變量才會(huì)被下一次內(nèi)存回收啟動(dòng)時(shí)所回收.
也就是說,有了閉包,嵌套的函數(shù)結(jié)構(gòu)才可以運(yùn)作,這也是符合我們的預(yù)期的.然后,閉包還有一些特性,卻往往讓程序員覺得很難理解.
看看下面一段代碼.
var result=[];
function foo(){
var i= 0;
for (;i<3;i=i+1){
result[i]=function(){
alert(i)
}
}
};
foo();
result[0](); // 3
result[1](); // 3
result[2](); // 3
這段代碼中,程序員希望foo函數(shù)中的變量i被內(nèi)部循環(huán)的函數(shù)使用,并且能分別獲得他們的索引,而實(shí)際上,只能獲得該變量最后保留的值,也就是說.閉包中所記錄的自由變量,只是對(duì)這個(gè)變量的一個(gè)引用,而非變量的值,當(dāng)這個(gè)變量被改變了,閉包里獲取到的變量值,也會(huì)被改變.
解決的方法之一,是讓內(nèi)部函數(shù)在循環(huán)創(chuàng)建的時(shí)候立即執(zhí)行,并且捕捉當(dāng)前的索引值,然后記錄在自己的一個(gè)本地變量里.然后利用返回函數(shù)的方法,重寫內(nèi)部函數(shù),讓下一次調(diào)用的時(shí)候,返回本地變量的值,改進(jìn)后的代碼:
var result=[];
function foo(){
var i= 0;
for (;i<3;i=i+1){
result[i]=(function(j){
return function(){
alert(j);
};
})(i);
}
};
foo();
result[0](); // 0
result[1](); // 1
result[2](); // 2
在這里我再解釋一下.這里用到了另外2個(gè)技術(shù),立即調(diào)用的匿名函數(shù)和返回函數(shù).也是初學(xué)者比較難以理解的部分.
-----------------------------------------------------------
2.談?wù)勀銓?duì)Cookie的理解和優(yōu)缺點(diǎn):
3.html5瀏覽器本地存儲(chǔ)有哪些?
4.web storage和cookie的區(qū)別?
5.cookie 和session 的區(qū)別:
6.display:none和visibility:hidden的區(qū)別?
7.position:absolute和float屬性的異同
8.介紹一下box-sizing屬性?
9.CSS選擇符有哪些?哪些屬性可以繼承?優(yōu)先級(jí)算法如何計(jì)算?CSS3新增偽類有那些?
10.position的值, relative和absolute分別是相對(duì)于誰進(jìn)行定位的?
11.CSS3有哪些新特性?
12.XML和JSON的區(qū)別?
13.說說你對(duì)語義化標(biāo)簽的理解?
14.網(wǎng)頁設(shè)計(jì)常見兼容性問題有哪些,如何解決?
15.解釋下浮動(dòng)和它的工作原理?清除浮動(dòng)的技巧
16.浮動(dòng)元素引起的問題和解決辦法?
17.DOM操作——怎樣添加、移除、移動(dòng)、復(fù)制、創(chuàng)建和查找節(jié)點(diǎn)
18.html5有哪些新特性、移除了那些元素?如何處理HTML5新標(biāo)簽的瀏覽器兼容問題?如何區(qū)分 HTML 和 HTML5?
19.iframe的優(yōu)缺點(diǎn)?
20.如何實(shí)現(xiàn)瀏覽器內(nèi)多個(gè)標(biāo)簽頁之間的通信?
21.請(qǐng)說出三種減少頁面加載時(shí)間的方法
22.documen.write和 innerHTML的區(qū)別
23.sql注入原理
24.XSS原理及防范
25.XSS與CSRF有什么區(qū)別嗎?
26.CSRF的防御
27.Flash、Ajax各自的優(yōu)缺點(diǎn),在使用中如何取舍?
28.GET和POST的區(qū)別,何時(shí)使用POST?
29.HTTP狀態(tài)碼
30.談?wù)劸W(wǎng)頁性能優(yōu)化問題
總結(jié)
以上是生活随笔為你收集整理的html测试大题代码,Html5+js测试题(示例代码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 根号三的用计算机怎么表示,计算器根号3怎
- 下一篇: html怎么去掉背景颜色,word背景颜