摘要:異步管理等到執(zhí)行完成后返回種狀態(tài),代表成功,代表失敗。我們?cè)诤瘮?shù)內(nèi)聲明的變量叫局部變量,局部變量只能在里面訪問,外面是訪問不到的。那么就是為解決這一問題的。可以用鏈?zhǔn)綄懛ǖ鹊疆惒接薪Y(jié)果再進(jìn)行下一步。
1. vue的雙向綁定原理:
vue的雙向綁定原理是通過Object.definedProperty的getter和setter來對(duì)屬性進(jìn)行數(shù)據(jù)劫持的。
因?yàn)?b>Object.definedProperty最低是支持到瀏覽器IE9的,所以如果想要兼容IE8,只能去做Object.definedProperty的兼容,那最終使用的是做的兼容,而不是Object.definedProperty.
找了一張圖片來表示響應(yīng)原理。首先Object.definedProperty會(huì)對(duì)data的每個(gè)屬性進(jìn)行數(shù)據(jù)的劫持,當(dāng)我們把data屬性的值改了,就會(huì)觸發(fā)它的setter,然后通知到watcher,watcher再更新指令所綁定的屬性的值。
通過Observer對(duì)data做監(jiān)聽,并提供了訂閱某個(gè)數(shù)據(jù)項(xiàng)變化的能力
把template編譯成一段document fragment,然后解析其中的Directive,得到每一個(gè)Directive所依賴的數(shù)據(jù)項(xiàng)和update方法。
通過Watcher把上述2部分結(jié)合起來,即把Directive中的數(shù)據(jù)依賴通過Watcher訂閱在對(duì)應(yīng)數(shù)據(jù)的Observer的Dep上,當(dāng)數(shù)據(jù)變化時(shí),
就會(huì)觸發(fā)Observer的Dep上的notify方法通知對(duì)應(yīng)的Watcher的update,進(jìn)而觸發(fā)Directive的update方法來更新dom視圖,最后達(dá)到模型和視圖關(guān)聯(lián)起來。
2. vue的鉤子函數(shù):依次為:beforeCreate ==> created ==> beforeMount ==> mounted ==> beforeUpdate ==> updated ==> beforeDestroy ==> destroyed
初始化的時(shí)候只有一次,只有當(dāng)數(shù)據(jù)更改的時(shí)候才會(huì)去觸發(fā)update鉤子
computed是對(duì)結(jié)果進(jìn)行緩存的,只要依賴的值沒有變化,結(jié)果就不會(huì)變化。method就是普通的方法。computed減少執(zhí)行的getter減去了重復(fù)計(jì)算,節(jié)省內(nèi)存。watch是一直在監(jiān)聽。比如this.num + new Date(),雖然new Date的值一直在變,但只要this.num沒變,結(jié)果還是一樣的。
4. flex做骰子的3點(diǎn):html:5. css的偽類:style: .box{ display:flex; } .item:nth-child(2){ align-self:center; } .item:nth-child(3){ align-self:right; }
:first-child/:last-children //選擇第一個(gè)孩子,:nth-of-type(n) :checked/:disabled //選擇checkbox已選中的 :afeter/:before //標(biāo)簽的偽類 :not(selecter) //非元素的其它元素6. 三行文本垂直居中:
1.加上下一樣的padding值,達(dá)到上下居中的目的。
2.利用table
.wapper{ displaty:table; } .cell{ display:table-cell; vertical-align:center; }
3.{position:relative;top:50%;transform:translateY(-50%)}
4.通過box:
.center{ display:box; box-orient:horizontal; box-pack:center; box-align:center; }
5.flex:
7. 跨域的方法:.flex{ display:flex; align-items:center; }
瀏覽器為了安全機(jī)制,采用同源策略,域名,協(xié)議,端口號(hào)一致的才可以進(jìn)行訪問;
1,jsonp:是通過script標(biāo)簽的src屬性來實(shí)現(xiàn)跨域的。通過src傳過去一個(gè)函數(shù),把數(shù)據(jù)放在函數(shù)的實(shí)參調(diào)用就可以拿到數(shù)據(jù)。由于是用src的鏈接,所以jsonp只支持get方式。content-type:javascript
2,cors:改變請(qǐng)求頭信息。客戶端加:Origin:地址。服務(wù)器:Access-Control-Allow-Origin:地址.支持IE10以上。
3,webpack:devServer里配置proxy:{api:"地址"};
4,nginx反向代理:
nginx.conf upstream tomcatserver{ server 192.168.72.49:8081//3.找到代理服務(wù)器的ip地址進(jìn)行請(qǐng)求 } server{ listen 80; server_name 8081.max.com;//1.客戶端調(diào)用名 location / { proxy_pass http://tomcatserver;//2.到代理服務(wù)器 index index.html index.html; } }8. webpack:
loader和plugins的區(qū)別:loader是負(fù)責(zé)解析代碼的,而且plugins是去做優(yōu)化,代碼整合之類的。
new ExtractTextPlugin("styles.css"):分隔出css多帶帶打包;
new webpack.optimize.CommonsChunkPlugin({ name: "vendor", minChunks: function (module) { // 該配置假定你引入的 vendor 存在于 node_modules 目錄中 return module.context && module.context.indexOf("node_modules") !== -1; } })//依賴項(xiàng)不重復(fù)打包,分隔模塊
importLazy(import("./components/TodoHandler")), TodoMenuHandler: () => importLazy(import("./components/TodoMenuHandler")), TodoMenu: () => importLazy(import("./components/TodoMenu")), }}>//懶加載
解析es7用到的babel:babel-core,babel-loader,babel-preset-es2015,babel-preset-stage-2,babe-plugin-transform-runtime,babel-runtime,babel-register.
9. es6的聲明方法,es5:var,function:var:會(huì)存在變量提升,如果在聲明之前用到會(huì)報(bào)undefined.
let:不存在變量提升,如果在聲明之前用到會(huì)報(bào)錯(cuò)。暫時(shí)性死區(qū)。塊級(jí)作用域。
const:聲明之后就不能改變。同上,如果是對(duì)象的話,只是指向引用的地址,所以對(duì)象里面的值改變了,是沒有任何反應(yīng)的。
function:聲明屬于window.function
class:聲明一個(gè)類
import:聲明一個(gè)引用過來的模塊
壓縮css,js:體積更小,加載速度更快。
css在前,js在后:css在前可以和dom樹一起合成render樹,js在后不阻塞dom渲染。
減少http請(qǐng)求:http請(qǐng)求需要時(shí)間。而且要等到它請(qǐng)求完才能執(zhí)行。請(qǐng)求是異步的,不知道什么時(shí)候才能請(qǐng)求完。
webpack配置:按需加載。分離css。分隔依賴,把相同的依賴只打包到一起,不必重復(fù)加載。
promise:promise等到執(zhí)行完成后返回2種狀態(tài),resolve代表成功,reject代表失敗。
如果有多個(gè)異步可以用promise.all([]).
async await:async聲明一個(gè)函數(shù)返回一個(gè)promise。await等到promise異步執(zhí)行結(jié)束拿到的一個(gè)結(jié)果
臟值檢測(cè):angular在scope模型上設(shè)置了一個(gè)監(jiān)聽隊(duì)列,用來監(jiān)聽數(shù)據(jù)變化并更新view,每次綁定一個(gè)東西到view上時(shí)angular就會(huì)往$watch隊(duì)列插入一條$watch,用來檢測(cè)它監(jiān)視的model里是否有變化的東西(一個(gè)數(shù)據(jù)一個(gè)$watcher,對(duì)象會(huì)有一個(gè),里面的值還會(huì)有,數(shù)組中每個(gè)對(duì)象也都會(huì)有一個(gè))。這些$watch列表會(huì)在$digest循環(huán)中通過一個(gè)叫做‘臟值檢測(cè)’的程序解析。
angular對(duì)大部分能產(chǎn)生數(shù)據(jù)變動(dòng)的事件進(jìn)行封裝(如click,mouse-enter,timeout),在每次事件發(fā)生后,比如更改了scope中的一條數(shù)據(jù),angular會(huì)自動(dòng)調(diào)用$digest來觸發(fā)一輪$digest循環(huán),它會(huì)觸發(fā)每個(gè)watcher,檢查scope中的當(dāng)前model值是否和上一次計(jì)算得到的Model值是否一樣,如不同,對(duì)應(yīng)的回調(diào)函數(shù)會(huì)被執(zhí)行,調(diào)用該函數(shù)的結(jié)果,就是view中的表達(dá)式內(nèi)容會(huì)被更新。
如果執(zhí)行了非angular的方法,如setTimeout需要調(diào)用$apply()應(yīng)用到angular上,它會(huì)調(diào)用$rootScope.$digest()。因此,一輪$digest循環(huán)在$rootScope開始,隨后會(huì)訪問到所有的children scope中的watchers。
$apply()里面可以加參數(shù),而且會(huì)觸發(fā)作用域樹上所有的監(jiān)控。$digest()只作用在當(dāng)前作用域和它的子作用域上。
angular服務(wù):sevicer對(duì)象的實(shí)例化this.xx=。factory返回一個(gè)對(duì)象return{a:xx}
13. 在arr=[1,2,4],4之前插入3arr.splice(2,0,3)14. json字符串與json對(duì)象的轉(zhuǎn)換:
在數(shù)據(jù)傳輸過程中,json是以文本,即字符串的形式傳遞的。而js操作的是json對(duì)象。
轉(zhuǎn)對(duì)象:str.parseJSON(),JSON.parse(str),eval("("+str+")")
轉(zhuǎn)字符串:obj.toJSONString(),JSON.stringify(obj)
因?yàn)?b>js是單線程的,setTimeout/setInterval是在定時(shí)器線程,要等主線程走完了,才會(huì)執(zhí)行事件隊(duì)列。如果主線程的計(jì)算執(zhí)行時(shí)間過長(zhǎng),那么定時(shí)器就要一直等著不能執(zhí)行,就導(dǎo)致了,動(dòng)畫卡,或者一下堆在一起執(zhí)行重疊過快。
requestAnimationFrame不需要設(shè)置時(shí)間間隔。IE9以下不支持。cancelAnimationFrame()用來取消。
每一個(gè)構(gòu)造函數(shù)都有自己的原型對(duì)象,用prototype屬性來表示。每個(gè)原型對(duì)象都有一個(gè)隱式的_proto_屬性指向它父級(jí)的原型對(duì)象。如:
let a= new A() a._proto_=A.prototype a._proto_._proto_=A.prototype._proto_=Object.prototype a._proto_._proto_._proto_=A.prototype._proto_._proto_=Object.prototype._proto_=null17. 閉包:
閉包簡(jiǎn)單來說就是函數(shù)套函數(shù)。我們?cè)诤瘮?shù)內(nèi)聲明的變量叫局部變量,局部變量只能在里面訪問,外面是訪問不到的。如果我們想訪問局部變量就可以在函數(shù)的內(nèi)部在寫一個(gè)函數(shù),根據(jù)作用域鏈的原則就可以往上找父級(jí)的變量。
閉包會(huì)導(dǎo)致內(nèi)存泄露的問題,解決辦法是用過之后把這個(gè)變量清空還原。
arguments是一個(gè)對(duì)應(yīng)于傳遞給函數(shù)的參數(shù)的類數(shù)組對(duì)象。它是一個(gè)類似于數(shù)組的對(duì)象,但還不是數(shù)組。
arguments.length:實(shí)參長(zhǎng)度。arguments.callee.length:形參長(zhǎng)度
可以用[].slice.call(arguments);或Array.from(arguments);[...arguments]
get一般表示從服務(wù)器獲取數(shù)據(jù),post是向服務(wù)器傳遞數(shù)據(jù)。
get的方式是url,因?yàn)樵诘刂窓谒蚤L(zhǎng)度有限,而且地址欄的內(nèi)容可以看到,所以保密性較差。
而post是放在requst body。對(duì)長(zhǎng)度沒有限制,保密性也較好。
get一般用于搜索。post一般用于表單提交。
3 + "3" = 33 undefined + 3 = NaN //undefined為NaN, null + 3 = 3 //null為空。 "null" + 3 = "null3" 當(dāng)有+的時(shí)候會(huì)檢查是否有類型為string的,如果有就會(huì)把其它值也轉(zhuǎn)化為string格式進(jìn)行字符連接。如果沒有string,有number,那么會(huì)把其它值轉(zhuǎn)化為number類型的值執(zhí)行加法運(yùn)算。21. 循環(huán)
for(vari=0,j=0;i<5,j<10;i++,j++){ } console.log(i+j) //2022. 給數(shù)組加一個(gè)數(shù)組去重的方法:
Array.prototype.q=function(arr){ let obj={},a=[]; for(let i=0;i23. 類的繼承: es6:extendses5:
1.構(gòu)造函數(shù)綁定:function Cat(name,color){ Animal.apply(this,arguments); this.name=name; this.color=color; }2.利用prototype:
function Cat(name,color){ this.name=name; this.color=color; } Cat.prototype=new Animal(); Cat.prototype.constructor=Cat;3.組合繼承:
function Cat(){ Animal.call(this) } Cat.prototype=new Animal();4.通過空對(duì)象:
function extend(Child,Parent){ var F=function(){}; F.prototype=Parent.prototype; Child.prototype=new F(); Child.prototype.constructor=Child; } function Animal(){} Animal.prototype.species="動(dòng)物"; function Cat(name){ this.name=name; } extend(Cat,Animal)5.拷貝繼承:
function extend2(Child,Parent){ var p=Parent.prototype; var c=Child.prototype; for(var i in p){ //淺拷貝 c[i]=p[i] } } extend2(Cat,Animal)24. map和forEach的區(qū)別:forEach不能breack,也不能return.
25. 獲取url地址:
map循環(huán)每一個(gè)的時(shí)候就相當(dāng)于在內(nèi)存中新建了一個(gè)數(shù)據(jù),比較占內(nèi)存window.location.href26. async的好處:最開始的異步都是用回調(diào)函數(shù)解決的,比如ajax,setTimeout,addEventListener.但是如果回調(diào)函數(shù)過多就會(huì)形成回調(diào)地獄。那么promise就是為解決這一問題的。promise可以用鏈?zhǔn)綄懛ǖ鹊疆惒接薪Y(jié)果再進(jìn)行下一步。但如果promise寫多了也會(huì)變的不直觀,async的await等到promise的返回。可以讓代碼看起來更加簡(jiǎn)潔高效。
27. 解構(gòu)出a.b.c的值:let obj={a:{b:{c:1}}} let {a:{b:{c}}}=obj console.log(c) //128.react的生命周期: 29. angular與vue的對(duì)比: 30. 計(jì)算數(shù)組中元素出現(xiàn)的次數(shù):請(qǐng)輸入代碼
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/95213.html
摘要:獲取的對(duì)象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對(duì)象即使沒有代碼,也會(huì)把默認(rèn)的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對(duì)于一個(gè)光禿禿的元素,方法返回對(duì)象中屬性值如果有就是據(jù)我測(cè)試不同環(huán)境結(jié)果可能有差異而就是。 花了很長(zhǎng)時(shí)間整理的前端面試資源,喜歡請(qǐng)大家不要吝嗇star~ 別只收藏,點(diǎn)個(gè)贊,點(diǎn)個(gè)star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項(xiàng)目地址 https:...
摘要:好不容易在月號(hào)這天中午點(diǎn)左右接到了來自阿里的面試電話。這里會(huì)不斷收集和更新基礎(chǔ)相關(guān)的面試題,目前已收集題。面試重難點(diǎn)的和的打包過程多線程機(jī)制機(jī)制系統(tǒng)啟動(dòng)過程,啟動(dòng)過程等等掃清面試障礙最新面試經(jīng)驗(yàn)分享,此為第一篇,開篇。 2016 年末,騰訊,百度,華為,搜狗和滴滴面試題匯總 2016 年未,騰訊,百度,華為,搜狗和滴滴面試題匯總 各大公司 Java 后端開發(fā)面試題總結(jié) 各大公司 Jav...
摘要:手冊(cè)網(wǎng)超級(jí)有用的前端基礎(chǔ)技術(shù)面試問題收集前端面試題目及答案匯總史上最全前端面試題含答案常見前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過程中最容易出現(xiàn)的問題前端面試題整理騰訊前端面試經(jīng)驗(yàn)前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊(cè)網(wǎng):http://www.shouce.ren/post/index 超級(jí)有用的前端基礎(chǔ)技術(shù)面試問題收集:http://www.codec...
摘要:手冊(cè)網(wǎng)超級(jí)有用的前端基礎(chǔ)技術(shù)面試問題收集前端面試題目及答案匯總史上最全前端面試題含答案常見前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過程中最容易出現(xiàn)的問題前端面試題整理騰訊前端面試經(jīng)驗(yàn)前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊(cè)網(wǎng):http://www.shouce.ren/post/index 超級(jí)有用的前端基礎(chǔ)技術(shù)面試問題收集:http://www.codec...
閱讀 1439·2019-08-29 17:14
閱讀 1646·2019-08-29 12:12
閱讀 727·2019-08-29 11:33
閱讀 3261·2019-08-28 18:27
閱讀 1442·2019-08-26 10:19
閱讀 904·2019-08-23 18:18
閱讀 3525·2019-08-23 16:15
閱讀 2539·2019-08-23 14:14