HTTP請求報(bào)文
一個(gè)HTTP請求報(bào)文由請求行(request line)、請求頭部(header)渤愁、請求體
堆(heap)和棧(stack)
棧(stack)會(huì)自動(dòng)分配內(nèi)存空間檐什,會(huì)自動(dòng)釋放碴卧。堆(heap)動(dòng)態(tài)分配的內(nèi)存,大小不定也不會(huì)自動(dòng)釋放乃正。
基本類型和引用類型
基本類型:簡單的數(shù)據(jù)段住册,存放在棧內(nèi)存中,占據(jù)固定大小的空間瓮具。
引用類型:指那些可能由多個(gè)值構(gòu)成的對象荧飞,保存在堆內(nèi)存中,包含引用類型的變量實(shí)際上保存的不是變量本身,而是指向該對象的指針名党。
基本數(shù)據(jù)類型包括Undefined,String,Boolean,Null,Number
傳值和傳址
從一個(gè)向另一個(gè)變量復(fù)制引用類型的值叹阔,復(fù)制的其實(shí)是指針,因此兩個(gè)變量最終指向同一個(gè)對象传睹。即復(fù)制的是棧中的地址而不是堆中的對象耳幢。
從一個(gè)變量復(fù)向另一個(gè)變量復(fù)制基本類型的值,會(huì)創(chuàng)建這個(gè)值的副本欧啤。
什么是閉包睛藻?
閉包是指有權(quán)訪問另一個(gè)函數(shù)作用域中變量得函數(shù)启上。
怎么創(chuàng)建閉包?
在函數(shù)內(nèi)部嵌套使用函數(shù)
為什么使用閉包修档?
好處:
因?yàn)樵陂]包內(nèi)部保持了對外部活動(dòng)對象得訪問碧绞,但外部的變量無法直接訪問內(nèi)部,避免了全局污染
可以當(dāng)坐私有成員吱窝,彌補(bǔ)了因js語法帶來的面向?qū)ο缶幊痰牟蛔?/p>
可以長久的在內(nèi)存中保存一個(gè)想要的變量
優(yōu)點(diǎn):
1讥邻、希望一個(gè)變量長期駐扎在內(nèi)存當(dāng)中(不被垃圾回收機(jī)制回收)
2、避免全局變量的污染
3院峡、私有成員的存在
4兴使、安全性提高
缺點(diǎn):
可能導(dǎo)致內(nèi)存占用過多,因?yàn)殚]包攜帶了自身的作用域
閉包只能取得外部包含函數(shù)中的最后一個(gè)值
一行代碼實(shí)現(xiàn)數(shù)組去重照激?
[...new Set([1,2,3,1,'a',1,'a'])]
怎樣實(shí)現(xiàn)水平垂直居中发魄?
第一種
#container{
position:relative;
}
#center{
width:100px;
height:100px;
poastion:absolute;
top:50%;
left:50%;
transform:translate(-50%,-50%);
}
第二種
#container{
position:relative;
}
#center{
width:100px;
height:100px;
position:absolute;
top:50%;
left:50%;
margin:-50px 0 0 -50px;
}
第三種
#container{
position:relative;
}
#center{
position:absoluter;
margin:auto;
top:0;
left:0;
right:0;
bottom;
}
第四種 flex
#container{
display:flex;
justify-content:center;
align-items:center;
}
事件循環(huán)機(jī)制
執(zhí)行上下文(Execution context)
函數(shù)調(diào)用棧(call stack)
隊(duì)列數(shù)據(jù)結(jié)構(gòu)(queue)
Promise
事件委托是什么?
通過事件冒泡的原理俩垃,讓自己所觸發(fā)的事件励幼,由父元素代替執(zhí)行
dom 事件委托的原理,有什么優(yōu)缺點(diǎn)
事件委托原理:事件冒泡機(jī)制
優(yōu)點(diǎn):
1.可以大量節(jié)約內(nèi)存占用口柳,減少事件注冊苹粟。
2.可以實(shí)現(xiàn)當(dāng)新增子對象時(shí),無需再對其進(jìn)行事件綁定
缺點(diǎn):
事件代理的常用應(yīng)用應(yīng)該僅限于上述需求跃闹,如果把所有事件都用事件代理嵌削,可能會(huì)出現(xiàn)事件誤判。(本不該被觸發(fā)的事件被綁定上了事件)
AJAX的工作原理
創(chuàng)建 ajax 對象
判斷數(shù)據(jù)傳輸方式(GET / POST)
打開鏈接 open()
發(fā)送 send()
當(dāng) ajax 對象完成第四步(onreadystatechange)數(shù)據(jù)接受完成望艺,判斷 http 響應(yīng)狀態(tài)(status)200-300之間或者 304(緩存)執(zhí)行回調(diào)函數(shù)
如何優(yōu)化自己的代碼苛秕?
代碼復(fù)用
避免全局變量(命名空間,封閉空間找默,模塊化mvc[數(shù)據(jù)層艇劫,表現(xiàn)層,控制層].....)
拆分函數(shù)避免函數(shù)過于臃腫
添加相關(guān)注釋惩激,使代碼更加清晰明了
降低頁面加載事件的方法
1店煞、壓縮 css,js 文件
2咧欣、合并 css浅缸,js 文件轨帜,減少 http 請求
3魄咕、外部 css,js 文件放在最底部
4蚌父、減少 dom 操作哮兰,盡可能用變量代替不必要的 dom 操作
節(jié)點(diǎn)的種類有幾種毛萌,分別是什么?
1喝滞、元素節(jié)點(diǎn):nodeType ===1;
2阁将、文本節(jié)點(diǎn):nodeType ===3;
3、屬性節(jié)點(diǎn):nodeType ===2;
null 和 undefined 的區(qū)別右遭?
null 是表示“無”的對象做盅,轉(zhuǎn)為數(shù)值時(shí)為0;undefined 是一個(gè)表示“無”的原始值窘哈,轉(zhuǎn)為數(shù)值時(shí)為NaN吹榴。
當(dāng)聲明的變量還未被初始化時(shí),變量的默認(rèn)值為undefined滚婉。null用來表示尚未存在的對象图筹。
undefined 表示“缺少值”,就是此處應(yīng)該有一個(gè)值让腹,但是還沒有定義远剩。
1、變量被聲明了骇窍,但是沒有賦值瓜晤,就等于undefined。
2像鸡、調(diào)用函數(shù)時(shí)活鹰,應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于undefined
3只估、對象沒有賦值的屬性志群,該屬性的值為undefined。
4蛔钙、函數(shù)沒有返回值時(shí)锌云,默認(rèn)返回undefined。
null表示“沒有對象”吁脱,即該處不應(yīng)該有值桑涎。
1、作為函數(shù)的參數(shù)兼贡,表示函數(shù)的參數(shù)不是對象
2攻冷、作為對象原型鏈的終點(diǎn)。
VUE
react 和 vue 比較來說有什么區(qū)別遍希?
- 數(shù)據(jù)綁定(vue雙向等曼,react單向)
2.計(jì)算屬性 vue 有,提供方便;而 react 沒有
3.vue 可以 watch 一個(gè)數(shù)據(jù)項(xiàng)禁谦; 而 react 不行
4.vue 喲與提供的direct 特別是預(yù)置的 directive 因?yàn)閳鼍伴_發(fā)更容易胁黑;react 沒有
5.生命周期函數(shù)名太長 directive
vue 雙向數(shù)據(jù)綁定的原理是什么?
首先創(chuàng)數(shù)對象的雙向數(shù)據(jù)綁定 Object.defineProperty(target,key,decription),在 decription
中設(shè)置 get 和 set 屬性(此時(shí)應(yīng)該注意 description 中 get 和 set 不能與面熟屬性共存)
數(shù)的實(shí)現(xiàn)與對象不同
同時(shí)運(yùn)用觀察者模式實(shí)現(xiàn) wather州泊,用戶數(shù)據(jù)和 view 使徒的更新
什么時(shí)vue的生命周期丧蘸?
vue實(shí)例從創(chuàng)建到銷毀的過程,就是生命周期遥皂。從開始創(chuàng)建力喷,初始化數(shù)據(jù),編譯模板演训,掛載Dom→渲染冗懦,更新→渲染,銷毀等一系列過剩仇祭,稱為Vue的生命周期披蕉。
vue生命周期的共幾個(gè)階段?
它可以共分為8個(gè)階段:創(chuàng)建前/后乌奇,載入前/后没讲,更新前/后,銷毀前/后
vue生命周期的作用是什么礁苗?
它的生命周期有多個(gè)事件鉤子爬凑,讓我們在控制整個(gè)Vue實(shí)例的過程中更容易形成好的邏輯。
第一個(gè)頁面加載會(huì)觸發(fā)哪幾個(gè)鉤子试伙?
會(huì)觸發(fā) beforeCreate嘁信,created,beforeMount疏叨,mounted
DOM渲染在那個(gè)周期中就已經(jīng)完成了潘靖?
DOM渲染在mounted中就已經(jīng)完成了
Vue router 跳轉(zhuǎn)和 location.href 跳轉(zhuǎn)游什么區(qū)別?
router 是 hash 改變
location.href 是頁面跳轉(zhuǎn)蚤蔓,刷新頁面