摘要:在此基礎(chǔ)上加入了回調(diào)函數(shù),加載完之后會執(zhí)行中定義的函數(shù),所需要的數(shù)據(jù)會以參數(shù)的形式傳遞給該函數(shù)。通常的做法是,為它們指定回調(diào)函數(shù)。
前端面試題總結(jié)——JS(持續(xù)更新中) 1.javascript的typeof返回哪些數(shù)據(jù)類型
Object number function boolean underfind string
2.例舉3種強(qiáng)制類型轉(zhuǎn)換和2種隱式類型轉(zhuǎn)換?強(qiáng)制(parseInt,parseFloat,number)
隱式(== - ===)
前者是切割成數(shù)組的形式,后者是將數(shù)組轉(zhuǎn)換成字符串
4.數(shù)組方法pop() push() unshift() shift()Unshift()頭部添加 shift()頭部刪除
Push()尾部添加 pop()尾部刪除
1.執(zhí)行順序不一樣、
2.參數(shù)不一樣
3.事件加不加on
4.this指向問題
Var ev = ev || window.event
document.documentElement.clientWidth || document.body.clientWidth
Var target = ev.srcElement||ev.target
1.一個(gè)在url后面 一個(gè)放在虛擬載體里面
2.有大小限制
3.安全問題
4.應(yīng)用不同 一個(gè)是論壇等只需要請求的,一個(gè)是類似修改密碼的
Object.call(this,obj1,obj2,obj3)
Object.apply(this,arguments)
使用eval parse 鑒于安全性考慮 使用parse更靠譜
10.寫一個(gè)獲取非行間樣式的函數(shù)function getStyle(obj, attr, value) { if(!value) { if(obj.currentStyle) { return obj.currentStyle(attr) } else { obj.getComputedStyle(attr, false) } } else { obj.style[attr]=value } }11.事件委托(代理)是什么
讓利用事件冒泡的原理,讓自己的所觸發(fā)的事件,讓他的父元素代替執(zhí)行!
12.閉包是什么,有什么特性,對頁面有什么影響閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
http://blog.csdn.net/gaoshanw... (問這個(gè)問題的不是一個(gè)公司)
也可以直接點(diǎn)擊此處查看之前更的關(guān)于閉包的文章
stoppropagation / preventdefault
14.添加 插入 替換 刪除到某個(gè)接點(diǎn)的方法obj.appendChidl()
obj.innersetBefore
obj.replaceChild
obj.removeChild
動態(tài)創(chuàng)建script標(biāo)簽,回調(diào)函數(shù)
Ajax是頁面無刷新請求數(shù)據(jù)操作
本地對象為array obj regexp等可以new實(shí)例化
內(nèi)置對象為gload Math 等不可以實(shí)例化的
宿主為瀏覽器自帶的document,window 等
頁面加載完成有兩種事件:
一.是ready,表示文檔結(jié)構(gòu)已經(jīng)加載完成(不包含圖片等非文字媒體文件)。
二.是onload,指示頁面包含圖片等文件在內(nèi)的所有元素都加載完成。
前者會自動轉(zhuǎn)換類型
后者不會
同源策略是一個(gè)很重要的安全理念,它在保證數(shù)據(jù)的安全性方面有著重要的意義,
一段腳本只能讀取來自于同一來源的窗口和文檔的屬性,這里的同一來源指的是協(xié)議、域名和端口號的組合
var arr = [ 1,5,1,7,5,9]; Math.max(...arr) // 921.更短的數(shù)組去重寫法
[...new Set([2,"12",2,12,1,2,1,6,12,13,6])] // [2, "12", 12, 1, 6, 13]22.排序算法
升序:
var numberArray = [3,6,2,4,1,5]; numberArray.sort(function(a,b){ return a-b; }) console.log(numberArray);23.冒泡排序
var examplearr=[8,94,15,88,55,76,21,39]; function sortarr(arr){ for(i=0;i24.null和undefined的區(qū)別:arr[j+1]){ var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } return arr; } sortarr(examplearr); console.log(examplearr);
null:表示無值;undefined:表示一個(gè)未聲明的變量,或已聲明但沒有賦值的變量,
或一個(gè)并不存在的對象屬性。
1.由于閉包會使得函數(shù)中的變量都被保存在內(nèi)存中,內(nèi)存消耗很大,所以不能濫用閉包,否則會造成網(wǎng)頁的性能問題,在IE中可能導(dǎo)致內(nèi)存泄露。解決方法是,在退出函數(shù)之前,將不使用的局部變量全部刪除。
2.閉包會在父函數(shù)外部,改變父函數(shù)內(nèi)部變量的值。所以,如果你把父函數(shù)當(dāng)作對象(object)使用,把閉包當(dāng)作它的公用方法(Public Method),把內(nèi)部變量當(dāng)作它的私有屬性(private value),這時(shí)一定要小心,不要隨便改變父函數(shù)內(nèi)部變量的值。
(關(guān)于閉包,詳細(xì)了解請看JavaScript之作用域與閉包詳解)
JSONP (JSON with Padding)是一個(gè)簡單高效的跨域方式,HTML中的script標(biāo)簽可以加載并執(zhí)行其他域的javascript,于是我們可以通過script標(biāo)記來動態(tài)加載其他域的資源。例如我要從域A的頁面pageA加載域B的數(shù)據(jù),那么在域B的頁面pageB中我以JavaScript的形式聲明pageA需要的數(shù)據(jù),然后在 pageA中用script標(biāo)簽把pageB加載進(jìn)來,那么pageB中的腳本就會得以執(zhí)行。JSONP在此基礎(chǔ)上加入了回調(diào)函數(shù),pageB加載完之后會執(zhí)行pageA中定義的函數(shù),所需要的數(shù)據(jù)會以參數(shù)的形式傳遞給該函數(shù)。JSONP易于實(shí)現(xiàn),但是也會存在一些安全隱患,如果第三方的腳本隨意地執(zhí)行,那么它就可以篡改頁面內(nèi)容,截獲敏感數(shù)據(jù)。但是在受信任的雙方傳遞數(shù)據(jù),JSONP是非常合適的選擇。
AJAX是不跨域的,而JSONP是一個(gè)是跨域的,還有就是二者接收參數(shù)形式不一樣!
27.請解釋變量聲明提升。在函數(shù)執(zhí)行時(shí),把變量的聲明提升到了函數(shù)頂部,而其值定義依然在原來位置。
28.如何從瀏覽器的URL中獲取查詢字符串參數(shù)。以下函數(shù)把獲取一個(gè)key的參數(shù)。
function parseQueryString ( name ){ name = name.replace(/[[]/,"["); var regexS = "[?&]"+name+"=([^]*)"; var regex = new RegExp( regexS ); var results = regex.exec( window.location.href ); if(results == null) { return ""; } else { return results[1]; } }29.arguments是什么?
arguments雖然有一些數(shù)組的性質(zhì),但其并非真正的數(shù)組,只是一個(gè)類數(shù)組對象。
其并沒有數(shù)組的很多方法,不能像真正的數(shù)組那樣調(diào)用.jion(),.concat(),.pop()等方法。
在代碼中出現(xiàn)表達(dá)式-“use strict”; 意味著代碼按照嚴(yán)格模式解析,這種模式使得Javascript在更嚴(yán)格的條件下運(yùn)行。
好處:
1.消除Javascript語法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為;
2.消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全;
3.提高編譯器效率,增加運(yùn)行速度;
壞處:
1.同樣的代碼,在”嚴(yán)格模式”中,可能會有不一樣的運(yùn)行結(jié)果;一些在”正常模式”下可以運(yùn)行的語句,在”嚴(yán)格模式”下將不能運(yùn)行。
1.就是一個(gè)函數(shù)的調(diào)用過程。那么就從理解這個(gè)調(diào)用過程開始吧。
函數(shù)a有一個(gè)參數(shù),這個(gè)參數(shù)是個(gè)函數(shù)b,當(dāng)函數(shù)a執(zhí)行完以后執(zhí)行函數(shù)b。那么這個(gè)過程就叫回調(diào)。
2.另外種解釋:開發(fā)網(wǎng)站的過程中,我們經(jīng)常遇到某些耗時(shí)很長的javascript操作。其中,既有異步的操作(比如ajax讀取服務(wù)器數(shù)據(jù)),也有同步的操作(比如遍歷一個(gè)大型數(shù)組),它們都不是立即能得到結(jié)果的。
通常的做法是,為它們指定回調(diào)函數(shù)(callback)。即事先規(guī)定,一旦它們運(yùn)行結(jié)束,應(yīng)該調(diào)用哪些函數(shù)。
let obj = {}; let arr = []; console.log(typeof obj === "object"); //true console.log(typeof arr === "object"); //true
從上面的輸出結(jié)果可知,typeof bar === “object” 并不能準(zhǔn)確判斷 bar 就是一個(gè) Object。可以通過 Object.prototype.toString.call(bar) === “[object Object]” 來避免這種弊端:
let obj = {}; let arr = []; console.log(Object.prototype.toString.call(obj)); //[object Object] console.log(Object.prototype.toString.call(arr)); //[object Array]33.下面的代碼會輸出什么?為什么?
console.log(1 + "2" + "2"); //122 console.log(1 + +"2" + "2"); //32 console.log(1 + -"1" + "2"); //02 console.log(+"1" + "1" + "2"); //112 console.log( "A" - "B" + "2"); //NaN2 console.log( "A" - "B" + 2); //NaN console.log("3" + 2 + 1);//321 console.log(typeof +"3"); //number console.log(typeof (""+3)); //string console.log("a" * "sd"); //NaN34.邏輯運(yùn)算
或邏輯時(shí):當(dāng)0在前面時(shí)console.log((0|| 2));則輸出為后面的數(shù),為2;
當(dāng)除0以為的數(shù)在前面時(shí)console.log((2|| 0));則輸出為2;
與邏輯時(shí):當(dāng)只要有0時(shí)console.log(0&&2 );則輸出都為0;
當(dāng)不存在0時(shí),console.log(1&&2 );則輸出都為后面的一個(gè),為2; console.log(2&&1 );則輸出為1;35.在 JavaScript,常見的 false 值:
0, "0", +0, -0, false, "",null,undefined,null,NaN
要注意空數(shù)組([])和空對象({}):
console.log([] == false) //true console.log({} == false) //false console.log(Boolean([])) //true36.解釋下面代碼的輸出
var a={}, b={key:"b"}, c={key:"c"}; a[b]=123; a[c]=456; console.log(a[b]);
因?yàn)樵谠O(shè)置對象屬性時(shí),JS將隱式地stringify參數(shù)值。
在本例中,由于b和c都是對象,它們都將被轉(zhuǎn)換為“[object object]”。
因此,a[b]和[c]都等價(jià)于[[object object]],并且可以互換使用。
所以,設(shè)置或引用[c]與設(shè)置或引用a[b]完全相同。`
(function(x) { return (function(y) { console.log(x); })(2) })(1);
輸出1,閉包能夠訪問外部作用域的變量或參數(shù)。
38.請寫出以下輸出結(jié)果:function Foo() { getName = function () { alert (1); }; return this; } Foo.getName = function () { alert (2);}; Foo.prototype.getName = function () { alert (3);}; var getName = function () { alert (4);}; function getName() { alert (5);} Foo.getName(); //2 getName(); //4 Foo().getName(); //1 getName(); //1 new Foo.getName(); //2 new Foo().getName(); //3 new new Foo().getName(); //339.談?wù)勀銓jax的理解?(概念、特點(diǎn)、作用)
AJAX全稱為“Asynchronous JavaScript And XML”(異步JavaScript和XML)是指一種創(chuàng)建交互式網(wǎng)頁應(yīng)用的開發(fā)技術(shù)、改善用戶體驗(yàn),實(shí)現(xiàn)無刷新效果。
優(yōu)點(diǎn)
a、不需要插件支持
b、優(yōu)秀的用戶體驗(yàn)
c、提高Web程序的性能
d、減輕服務(wù)器和帶寬的負(fù)擔(dān)
缺點(diǎn)
a、破壞瀏覽器“前進(jìn)”、“后退”按鈕的正常功能,可以通過簡單的插件彌補(bǔ)
b、對搜索引擎的支持不足
a、什么是deferred對象
在回調(diào)函數(shù)方面,jQuery的功能非常弱。為了改變這一點(diǎn),jQuery開發(fā)團(tuán)隊(duì)就設(shè)計(jì)了deferred對象。
簡單說,deferred對象就是jQuery的回調(diào)函數(shù)解決方案。在英語中,defer的意思是”延遲”,所以deferred對象的含義就是”延遲”到未來某個(gè)點(diǎn)再執(zhí)行。
它解決了如何處理耗時(shí)操作的問題,對那些操作提供了更好的控制,以及統(tǒng)一的編程接口。
b、它的主要功能,可以歸結(jié)為四點(diǎn):
(1)、實(shí)現(xiàn)鏈?zhǔn)讲僮?
(2)、指定同一操作的多個(gè)回調(diào)函數(shù)
(3)、為多個(gè)操作指定回調(diào)函數(shù)
(4)、普通操作的回調(diào)函數(shù)接口
跨域是指不同域名之間相互訪問。
JavaScript同源策略的限制,A域名下的JavaScript無法操作B或是C域名下的對象
實(shí)現(xiàn):
(1)、JSONP跨域:利用script腳本允許引用不同域下的js實(shí)現(xiàn)的,將回調(diào)方法帶入服務(wù)器,返回結(jié)果時(shí)回調(diào)。
1 通過jsonp跨域
1.原生實(shí)現(xiàn): 2.document.domain + iframe跨域 此方案僅限主域相同,子域不同的跨域應(yīng)用場景。 1.父窗口:(http://www.domain.com/a.html) 2.子窗口:(http://child.domain.com/b.html) 弊端:請看下面渲染加載優(yōu)化 1、 nginx代理跨域 2、 nodejs中間件代理跨域 3、 后端在頭部信息里面設(shè)置安全域名
(3)、跨域資源共享(CORS)
跨域資源共享(CORS)是一種網(wǎng)絡(luò)瀏覽器的技術(shù)規(guī)范,它為Web服務(wù)器定義了一種方式,允許網(wǎng)頁從不同的域訪問其資源。
CORS與JSONP相比:
a、JSONP只能實(shí)現(xiàn)GET請求,而CORS支持所有類型的HTTP請求。
b、使用CORS,開發(fā)者可以使用普通的XMLHttpRequest發(fā)起請求和獲得數(shù)據(jù),比起JSONP有更好的錯(cuò)誤處理。
c、JSONP主要被老的瀏覽器支持,它們往往不支持CORS,而絕大多數(shù)現(xiàn)代瀏覽器都已經(jīng)支持了CORS。
更多跨域的具體內(nèi)容請看 https://segmentfault.com/a/11...
a.模板引擎(這里特指用于Web開發(fā)的模板引擎)是為了使用戶界面與業(yè)務(wù)數(shù)據(jù)(內(nèi)容)分離而產(chǎn)生的,它可以生成特定格式的文檔,用于網(wǎng)站的模板引擎就會生成一個(gè)標(biāo)準(zhǔn)的HTML文檔。
b.在一些示例中javascript有大量的html字符串,html中有一些像onclick樣的javascript,這樣javascript中有html,html中有javascript,代碼的偶合度很高,不便于修改與維護(hù),使用模板引擎可以解決問題。
JavaScript是一種動態(tài)、弱類型、基于原型的語言,通過瀏覽器可以直接執(zhí)行。
當(dāng)瀏覽器遇到
恢復(fù)方法:javascript:alert(document.oncontextmenu="")
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94264.html
摘要:前端面試題總結(jié)持續(xù)更新中為什么只需要寫需要來規(guī)范瀏覽器的行為讓瀏覽器按照它們應(yīng)該的方式來運(yùn)行基于所以需要對進(jìn)行引用,才能告知瀏覽器文檔所使用的文檔類型。 前端面試題總結(jié)——H5(持續(xù)更新中) 1.HTML5 為什么只需要寫 ? HTML5 需要doctype來規(guī)范瀏覽器的行為,讓瀏覽器按照它們應(yīng)該的方式來運(yùn)行; HTML4.01基于SGML,所以需要對DTD進(jìn)行引用,才能告知瀏覽器文檔...
摘要:獲取的對象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對象即使沒有代碼,也會把默認(rèn)的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個(gè)光禿禿的元素,方法返回對象中屬性值如果有就是據(jù)我測試不同環(huán)境結(jié)果可能有差異而就是。 花了很長時(shí)間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...
摘要:前言一直混跡社區(qū)突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來有點(diǎn)混亂所以將前端主流技術(shù)做了一個(gè)書簽整理不求最多最全但求最實(shí)用。 前言 一直混跡社區(qū),突然發(fā)現(xiàn)自己收藏了不少好文但是管理起來有點(diǎn)混亂; 所以將前端主流技術(shù)做了一個(gè)書簽整理,不求最多最全,但求最實(shí)用。 書簽源碼 書簽導(dǎo)入瀏覽器效果截圖showImg(https://segmentfault.com/img/bVbg41b?w=107...
摘要:前端面試題總結(jié)持續(xù)更新中是哪個(gè)組件的屬性模塊的組件。都提供合理的鉤子函數(shù),可以讓開發(fā)者定制化地去處理需求。 前端面試題總結(jié)——VUE(持續(xù)更新中) 1.active-class是哪個(gè)組件的屬性? vue-router模塊的router-link組件。 2.嵌套路由怎么定義? 在 VueRouter 的參數(shù)中使用 children 配置,這樣就可以很好的實(shí)現(xiàn)路由嵌套。 //引入兩個(gè)組件 ...
閱讀 2675·2023-04-25 18:10
閱讀 1611·2019-08-30 15:53
閱讀 2803·2019-08-30 13:10
閱讀 3224·2019-08-29 18:40
閱讀 1133·2019-08-23 18:31
閱讀 1205·2019-08-23 16:49
閱讀 3407·2019-08-23 16:07
閱讀 881·2019-08-23 15:27