javascript面試題

1、第一個為字母,后面是字母數(shù)字下劃線總長度為5-20 正則:

?/^[a-zA-Z]\w{4-19}/

2、怎么規(guī)避javascript多人并發(fā)函數(shù)重命名問題:

根據(jù)不同的開發(fā)人員實(shí)現(xiàn)的功能,在函數(shù)名加前綴每個開發(fā)人員都把自己的函數(shù)封裝到類中,然后調(diào)用的時候即使函數(shù)名相同,但是因為是要類.函數(shù)名來調(diào)用,所以也減少了重復(fù)的可能性

3、javascript如何實(shí)現(xiàn)面向?qū)ο笾械睦^承

六中繼承方式....更新中。。。

4、javascript如何檢測一個變量是一個String類型的?請寫出函數(shù)實(shí)現(xiàn)。

function a(obj){? return typeof(obj)=="string";}alert(a(123));alert(a("abc"));

5、javascript有幾種數(shù)據(jù)類型基本數(shù)據(jù)類型:

Number(數(shù)字)String(字符串) null nudefined(未定義) boolean(布爾)引用數(shù)據(jù)類型:function(函數(shù)) object(對象)[Array]數(shù)組 Data(時間)RegExp正則 ...

6、AJAX是什么?同步和異步的區(qū)別?如何解決跨域問題?

AJAX的全稱是Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進(jìn)行更新。

同步的意思是當(dāng)JS代碼加載到當(dāng)前AJAX的時候會把頁面里所有的代碼停止加載,頁面出現(xiàn)假死狀態(tài),當(dāng)這個AJAX執(zhí)行完畢后才會繼續(xù)運(yùn)行其他代碼頁面假死狀態(tài)解除。而異步則這個AJAX代碼運(yùn)行中的時候其他代碼一樣可以運(yùn)行。

[跨域引用文章]

JQuery的AJAX解決跨域問題:

$(document).ready(function() {

? ? ? ? ? ? ?var ?url='http://localhost:8080/WorkGroupManagment/open/getGroupById"? ? ? +"?id=1&callback=?';

? ? ? ? ? ? $.ajax({

? ? ? ? ? ? ? ? ? ? url:url,dataType:'jsonp',processData:false,type:'get',success:function(data) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert(data.name);

? ? ? ? ? ? ? ? ? ?}, error:function(XMLHttpRequest, textStatus, errorThrown) {

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert(XMLHttpRequest.status);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?alert(XMLHttpRequest.readyState);

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? alert(textStatus);

? ? ? ? ? ? ? ? ? ? ? }

});

});

JSONP也叫填充式JSON,是應(yīng)用JSON的一種新方法,只不過是被包含在函數(shù)調(diào)用中的JSON(如:callback({"name", "chenjun"});)。JSONP由兩部分組成:回調(diào)函數(shù)和數(shù)據(jù)?;卣{(diào)函數(shù)是當(dāng)響應(yīng)到來時應(yīng)該在頁面中調(diào)用的函數(shù),而數(shù)據(jù)就是傳入回調(diào)函數(shù)中的JSON數(shù)據(jù)跨域原理:利用標(biāo)簽沒有跨域限制,實(shí)現(xiàn)跨域目的

JSONP優(yōu)缺點(diǎn)

優(yōu)點(diǎn):它不像XMLHttpRequest對象實(shí)現(xiàn)的Ajax請求那樣受到同源策略的限制;它的兼容性更好,在更加古老的瀏覽器中都可以運(yùn)行;并且在請求完畢后可以通過調(diào)用callback的方式回傳結(jié)果

缺點(diǎn):它只支持GET請求而不支持POST等其它類型的HTTP請求;它只支持跨域HTTP請求這種情況,不能解決不同域的兩個頁面之間如何進(jìn)行JS調(diào)用的問題

CORS

CORS(Cross-Origin Resource Sharing)跨域資源共享,定義了必須在訪問跨域資源時,瀏覽器與服務(wù)器應(yīng)該如何溝通。

跨域原理:CORS背后的基本思想就是使用自定義的HTTP頭部讓瀏覽器與服務(wù)器進(jìn)行溝通,從而決定請求或響應(yīng)是應(yīng)該成功還是失敗

瀏覽器支持情況:

Chrome 3+ ? ? ?Firefox 3.5+ ? ??Opera 12+ ? ? ??Safari 4+ ? ? ? ??Internet Explorer 8+

Chrome,F(xiàn)irefox,Opera和Safari都使用XMLHttpRequest2對象。 Internet Explorer使用了類似的XDomainRequest對象,其工作原理和XMLHttpRequest大致相同,但增加了額外的安全預(yù)防措施。

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

優(yōu)點(diǎn):支持所有類型的HTTP請求;使用普通的XMLHttpRequest發(fā)起請求和獲得數(shù)據(jù),擁有良好的出錯處理

缺點(diǎn):老式瀏覽器不支持

7、給出異步加載js方案,不少于兩種

[js異步加載的三種解決方案]

8、document.write和 innerHTML的區(qū)別?

document.write是直接將內(nèi)容寫入頁面的內(nèi)容劉,會導(dǎo)致頁面全部重繪,innerHTML將內(nèi)容寫入某個DOM節(jié)點(diǎn),不會導(dǎo)致頁面全部重繪

9、如何添加HTML元素的事件,有幾種方法?

[添加html元素的事件]

1通過HTML元素屬性2通過對象屬性3.通過W3C監(jiān)聽方式(標(biāo)準(zhǔn)方式)或者IE專屬的中間模型添加事件

10、多瀏覽器檢測通過什么?

[常見瀏覽器User-Agent大全]

window.navigator.userAgent這個查詢當(dāng)前瀏覽器型號版本但是window.userAgent也可以查詢到不知道有沒有區(qū)別

11、如何控制網(wǎng)頁在網(wǎng)絡(luò)傳輸過程中的數(shù)據(jù)量?

我一般這樣處理:

服務(wù)器發(fā)送數(shù)據(jù)塊前發(fā)送數(shù)據(jù)塊長度,然后發(fā)送數(shù)據(jù)

客戶端先讀取這個長度,然后按這個長度接收數(shù)據(jù)。

什么面向?qū)ο?/b>:


mvc這種框架有什么好處?

會讓項目可維護(hù)性高,所有涉及界面的代碼都在視圖(view)中,所有涉及核心邏輯的代碼都在模型(Model)里面。URL路由之類的代碼都在控制器(Controller)中

預(yù)解釋:

1、在預(yù)解釋的時候,不管條件是否成立,都要進(jìn)行預(yù)解釋

2、預(yù)解釋的時候只對等號左邊的進(jìn)行預(yù)解釋,右邊的是值,是不進(jìn)行預(yù)解釋的

3、函數(shù)體中return下面的代碼雖然不在執(zhí)行了,但是需要進(jìn)行預(yù)解釋;return后面的返回的是值,是不進(jìn)行預(yù)解釋的;

4、自執(zhí)行函數(shù)的function是不進(jìn)行預(yù)解釋的

5、在預(yù)解釋階段,如果當(dāng)前的這個名字已經(jīng)聲明過了,那么下面在遇到就不會在從新的聲明了,但是需要重新的賦值;

in:用來檢測某一個屬性名是否屬于這個對象的

this:

->我們一般只研究函數(shù)執(zhí)行的時候里面的this

->this是誰和當(dāng)前的函數(shù)在哪執(zhí)行和在哪定義沒有半毛錢的關(guān)系

1)看函數(shù)執(zhí)行的時候,函數(shù)名之前是否有".",有的話"."前面是誰this就是誰,沒有的話this就是window

2)自執(zhí)行函數(shù)中的this永遠(yuǎn)是window

3)給元素的某一個事件綁定方法,當(dāng)事件觸發(fā)的時候,方法中的this是當(dāng)前元素本身

4)在構(gòu)造函數(shù)模式中,我們的this.xxx=xxx中的this是當(dāng)前的類的一個實(shí)例

5)call和apply強(qiáng)制改變this的指向->以上所有的this情況在遇到call/apply的時候都不好使,都已強(qiáng)制改變的為主

obj.fn.call(1);//this->1

一般情況下,我們執(zhí)行call方法第一個傳遞的參數(shù)值是誰,那么fn中的this就是誰

[在非嚴(yán)格模式下]

第一個參數(shù)沒有傳遞值、傳遞的是null、傳遞的是undefined fn中的this都是window

[嚴(yán)格模式下]

第一個參數(shù)傳遞的是誰this就是誰,傳遞null/undefined,fn中的this都是對應(yīng)的null/undefined,不傳遞值默認(rèn)也是undefined

6)定時器的this永遠(yuǎn)是window

瀏覽器的內(nèi)存分為兩類:

堆內(nèi)存:引用數(shù)據(jù)類型開辟的那個存儲空間(用來存儲對象的鍵值對和函數(shù)的代碼字符串的) ->存儲倉庫

棧內(nèi)存:就是我們的作用域(全局作用域/私有的作用域)->執(zhí)行環(huán)境

[棧內(nèi)存的釋放]

全局作用域,在瀏覽器加載頁面的時候形成,只有在瀏覽器關(guān)閉頁面的時候才能釋放->"全局作用域?qū)儆诓讳N毀的作用域"

立即銷毀的私有作用域:一般情況下,函數(shù)執(zhí)行完成后,當(dāng)前形成的這個私有的作用域,就沒有用了,為了提高性能,瀏覽器會自動的把它釋放掉

不銷毀的私有作用域:函數(shù)執(zhí)行形成一個私有的作用域A,但是A中的某一部分內(nèi)容被A以外的東西(變量)給占用了,那么A這個作用域就不能銷毀了

一個函數(shù)執(zhí)行,形成一個私有的作用域A,A中返回一個引用的數(shù)據(jù)類型值(函數(shù)、對象、數(shù)組...),并且被外面的一個變量接收了,此時A這個作用域就不能釋放了

閉包:

閉包是一種"機(jī)制":函數(shù)執(zhí)行形成私有的作用域(不管銷毀還是不銷毀),保護(hù)了里面的私有變量不受外界的干擾

單例模式:

起到了一個分組的作用->把描述同一件事物的屬性和方法放在同一個"命名空間"下,避免了全局變量過多使用造成的沖突

每一個對象都是一個單獨(dú)的實(shí)例,里面的屬性都是自己私有的屬性,不同實(shí)例之間互不影響

JS中的異步編程:定時器、所有的事件綁定都是異步編程、回調(diào)函數(shù)也可以理解為異步編程、AJAX中也可以設(shè)置異步編程


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

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

  • 1.幾種基本數(shù)據(jù)類型?復(fù)雜數(shù)據(jù)類型?值類型和引用數(shù)據(jù)類型?堆棧數(shù)據(jù)結(jié)構(gòu)? 基本數(shù)據(jù)類型:Undefined、Nul...
    極樂君閱讀 5,876評論 0 106
  • 一、ajax原理是什么?ajax如何實(shí)現(xiàn)跨域?原理及過程? Q1:Ajax的工作原理:通過XmlHttpReque...
    迷人的洋蔥蔥閱讀 278評論 0 2
  • 來源:BAT及各大互聯(lián)網(wǎng)公司2014前端筆試面試題--JavaScript篇 1、JavaScript是一門什么樣...
    darr250閱讀 2,343評論 0 17
  • 「怕麻煩」是一種最壞的習(xí)慣。仔細(xì)觀察一下,大多數(shù)人生活的困境,其實(shí)都是在作決策時因為「怕麻煩」而產(chǎn)生的。 學(xué)習(xí)時遇...
    曾曉超閱讀 303評論 0 1
  • 2017.03.15 星期三 3月份事業(yè)目標(biāo): 一、3月31號前公司入賬58000元的培訓(xùn)服務(wù)費(fèi),同時接收5家新客...
    木槿有點(diǎn)著迷閱讀 347評論 0 2

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