1.組件懶加載:
??又叫延遲加載或者按需加載碌识,使用import函數(shù)來實現(xiàn)
2.盒子模型:
??分為內(nèi)容內(nèi)容框和邊框盒模型,有外邊距(margin)、內(nèi)邊距(padding)邊框(border),內(nèi)容區(qū)域(content)組成
3.什么是js閉包,有什么作用
??內(nèi)部函數(shù)能訪問外部函數(shù)作用域中的變量蜈膨;
外部函數(shù)定義了內(nèi)部函數(shù),并在其作用域聲明了一些變量牺荠;
內(nèi)部函數(shù)能夠捕獲并保留對外部作用域變量的引用翁巍,即便外部函數(shù)執(zhí)行結(jié)束;
用于數(shù)據(jù)封裝(創(chuàng)建私有變量和方法)休雌,模塊化灶壶,狀態(tài)維持(讓變量的生命周期超出原本的作用域),函數(shù)柯里化(通過閉包保留部分參數(shù)挑辆,創(chuàng)造新的函數(shù))例朱,模塊化,異步編程
function 外部函數(shù)() {
function 內(nèi)部函數(shù)() {
var 內(nèi)部變量 = "我是內(nèi)部變量"
// 直接返回內(nèi)部變量
return 內(nèi)部變量
}
// 調(diào)用內(nèi)部函數(shù)并獲取內(nèi)部變量的值
var 內(nèi)部變量的值 = 內(nèi)部函數(shù)()
console.log(內(nèi)部變量的值)
}
外部函數(shù)()4.事件循環(huán)
??是JS處理異步操作的一種機制鱼蝉,確保了非阻塞的執(zhí)行環(huán)境洒嗤;
1.執(zhí)行桟運行所有同步代碼,比如函數(shù)調(diào)用魁亦,按照先進后出的規(guī)則
2.任務(wù)隊列分為宏任務(wù)(如setTimeout,setInterval)和微任務(wù)(如Promise的then,process.nextTick)
3.事件循環(huán)過程首先執(zhí)行全局腳本作為初始桟任務(wù)渔隶,桟內(nèi)任務(wù)執(zhí)行完畢,檢查微任務(wù)隊列,一次性執(zhí)行完所有微任務(wù)间唉,隨后取出一個宏任務(wù)執(zhí)行绞灼,執(zhí)行過程中又生成新的微任務(wù),如此宏任務(wù)微任務(wù)交替執(zhí)行呈野,直到完成所有任務(wù)低矮;
舉例說明:
- 先執(zhí)行所有同步代碼。
- 然后執(zhí)行當前微任務(wù)隊列中的所有任務(wù)被冒。
- 接著執(zhí)行下一個宏任務(wù)军掂。
- 重復(fù)上述過程,不斷檢查微任務(wù)隊列昨悼,再執(zhí)行宏任務(wù)蝗锥。
5.原型鏈
??是JS實現(xiàn)繼承的核心機制,允許對象之間共享屬性和方法率触,每個JS對象都有一個內(nèi)置的屬性為Prototype(它是一個原型對象可以使用proto或者getprototypeOf訪問對象內(nèi)部原鏈接终议,這個鏈接指向最終原型對象)
1.原型對象每個構(gòu)造函數(shù)都有一個prototype屬性,這個屬性就是原型對象葱蝗,原型對象上定義的屬性和方法穴张,可以被構(gòu)造函數(shù)創(chuàng)建的所有實例共享;
2.對象的屬性查找當訪問一個對象的屬性和方法時两曼,如果沒有對應(yīng)的屬性和方法js會繼續(xù)在該對象的原型上查找陆馁,如果還是沒有,則繼續(xù)在原型的原型上查找合愈,直到找到或到達原型鏈的末端(Object.prototype)這個過程就是原型鏈遍歷
最好不要修改原型,會影響到已經(jīng)存在的實例击狮。
6.JS模塊化開發(fā)
把一個復(fù)雜的程序佛析,分解成一個一個的獨立模塊,有助于避免全局變量污染彪蓬,增強代碼的復(fù)用
使用import和export關(guān)鍵字實現(xiàn)模塊導(dǎo)入導(dǎo)出寸莫。支持動態(tài)導(dǎo)入、命名和默認導(dǎo)出等特性档冬。
還有CommonJS,require用于倒入模塊膘茎,module.exports用于導(dǎo)出
區(qū)別在于值的傳遞不同前者為引用后者為淺拷貝;
加載時機不同前者為靜態(tài)加載是異步的酷誓,后者為運行時加載是同步的;
前者支持動態(tài)導(dǎo)入盐数,實現(xiàn)按需加載后者不行棒拂;
前者為ES標準的一部分,后者主要運用于node.js
7.MVVM開發(fā)模式和VUE特點
model view viewModel 數(shù)據(jù)改變視圖改變,視圖改變數(shù)據(jù)改變帚屉;model代表數(shù)據(jù)層谜诫,view代表視圖層,它們都通過viewModel進行通信
vue主要特點有:
1.聲明式渲染(將數(shù)據(jù)綁定在dom上攻旦,使得視圖能夠根據(jù)數(shù)據(jù)變化進行更新)
2.組件化(每個組件都是自包含的喻旷,可以復(fù)用)
3.mvvm模式
4.虛擬dom(可以理解為記錄下所有需要更新的dom,然后只更新這部分)
5.響應(yīng)式系統(tǒng)(自動響應(yīng)數(shù)據(jù)變化并更新視圖)
8.VUE的生命周期牢屋,一般在哪一塊發(fā)請求
beforeCreate/create
beforeMount/mounted
beforeUpdate/update
beforeDestroy/destroyed
一般在created和mounted里發(fā)送請求
9.Computed和Watch的區(qū)別及應(yīng)用場景
計算屬性有緩存且预,聲明式,默認為只讀伟阔,不支持異步辣之,適用于數(shù)據(jù)轉(zhuǎn)換場景
監(jiān)聽無緩存,支持異步皱炉,可手動觸發(fā)怀估,適用于數(shù)據(jù)變化之后的操作
10.VUE常用指令
v-bind v-on v-if v-for v-else-if v-model v-show v-text v-html v-pre v-cloak v-once
11.VUEX是什么,怎么使用合搅,哪些功能場景使用它
狀態(tài)管理模式和庫
安裝之后創(chuàng)建store.js在里面定義你的store多搀,然后在main.js中引入store,也可以通過this.emit
兄弟組件傳值vuex eventBus
13.v-model如何實現(xiàn)雙向綁定
它的內(nèi)部實際是v-bind和v-on赌髓,使用雙向綁定時从藤,通過v-bind:value將屬性綁定到表單的value屬性上然后通過v-on:input監(jiān)聽表單的input事件
14.VUE-router的兩種模式
哈希模式:#后面的部分用來表示當前路由,利用了window.onhashchange事件監(jiān)聽哈希的變化锁蠕,并在哈希改變時更新頁面視圖夷野,且兼容性好
歷史模式:頁面切換改變url,不需要重新加載頁面
15.axios是什么荣倾,它的特點有哪些
它基于promise的http客戶端
支持promise使得請求代碼更加優(yōu)雅簡潔
可以設(shè)置攔截器
自動解析JSON格式的響應(yīng)數(shù)據(jù)悯搔,也支持序列化js對象為JSON數(shù)據(jù)進行發(fā)送
支持取消請求
提供了get post put delete 等方法
支持鏈式調(diào)用
16.var let const 之間的區(qū)別
var:聲明的變量具有函數(shù)作用域,在函數(shù)外部聲明為全局變量舌仍,可以重新賦值妒貌,變量提升民轴,函數(shù)作用域
let:無法變量提升琉历,可重新賦值喊递,塊級作用域(只能在指定的代碼塊內(nèi)訪問)
const:無法變量提升蹦哼,不可重新賦值苟耻,塊級作用域
17.使用箭頭函數(shù)需要注意什么
沒有自己的this靶擦,它的this是從最近的一層函數(shù)繼承來的监徘,
不可改變this的綁定
不能用作構(gòu)造函數(shù)牍氛,沒有原型鏈
如果箭頭函數(shù)只有一條語句可以省略大括號和return
18.前端如何優(yōu)化性能
減少不必要的空白和注釋,減少文件大小
優(yōu)化圖片可以使用SVG和JPEG格式
按需加載
在元素狀態(tài)改變少的情況下用v-if
若元素狀態(tài)改變頻繁用v-show
盡量減少api請求數(shù)量
18.vue2和vu3有哪些區(qū)別(請分別從生命周期增炭、diff 算法忍燥、響應(yīng)式原理方面做出解答)
vue2的生命周期:
beforeCreate/create
beforeMount/mounted
beforeUpdate/update
beforeDestroy/destroyed
vue3的生命周期:
beforeUnmount/unmounted替換了beforeDestroy/destroyed
vue2 diff算法:
雙向綁定,數(shù)據(jù)更新的時候要重新遍歷對象
vue3 diff算法:
單向流隙姿,數(shù)據(jù)更新了只要在新的虛擬dom中找到更新之后的數(shù)據(jù)即可
vue3響應(yīng)式原理:
雙向綁定通過Object.defineProperty來綁定
vue3響應(yīng)式原理:
通過proxy代理解決綁定
19.說一說vue的diff算法
數(shù)據(jù)發(fā)生改變會生成一個虛擬dom梅垄,用這個虛擬dom跟就dom就行對比,然后更新已經(jīng)修改過的
20.iframe的作用以及優(yōu)缺點
用于頁面的內(nèi)嵌(嵌入另一個html頁面输玷,通常用于加載廣告队丝,嵌入視頻,地圖等第三方頁面)
優(yōu)點:
? <iframe> 中的內(nèi)容是獨立加載的欲鹏,不會阻塞主頁面的加載
? 可以進行局部刷新机久,減小帶寬,增加網(wǎng)站安全性能
? 無需離開當前頁面
缺點:
? 搜索引擎難以抓取iframe中的內(nèi)容赔嚎,從而影響用戶檢索時的網(wǎng)站排布優(yōu)先級
? iframe加載的內(nèi)容無法追蹤膘盖,難以提供詳細的日志記錄;
? iframe會增加頁面的請求次數(shù)和大小尤误,降低頁面速度
21.事件委托以及冒泡原理
事件委托是在父級元素上監(jiān)聽子級元素侠畔,基于事件冒泡原理實現(xiàn)的。
當一個事件在某個元素上觸發(fā)時损晤,該事件會從最深的節(jié)點開始向上冒泡软棺,直到到達文檔的根結(jié)點,利用這個特性我們可以在一個共同的祖先元素上設(shè)置事件監(jiān)聽器尤勋,當子元素觸發(fā)事件時喘落,事件會冒泡到這個祖先元素,然后我們通過事件對象判斷是哪個子元素觸發(fā)的事件最冰。
22.什么是防抖和節(jié)流
防抖主要是延遲函數(shù)的執(zhí)行揖盘,在用戶最后一次點擊后,等待固定時間去執(zhí)行锌奴,相當于加了一個冷卻時間。
節(jié)流主要是保證一個函數(shù)在一定時間內(nèi)只被調(diào)用一次憾股,可以使用定時器和時間戳來實現(xiàn)鹿蜀。
23.前端如何實現(xiàn)即時通訊
??ajax輪詢:最早的實時通信技術(shù)之一,定時向服務(wù)器發(fā)送請求來檢查是否有新消息
WebSocket(使用了全雙工的通信渠道服球,允許服務(wù)器和客戶端雙向?qū)崟r通信茴恰,協(xié)議為ws://或wss://)
以WebSocket為例,實現(xiàn)前端即時通訊的基本步驟如下:
建立WebSocket連接:使用new WebSocket(url)創(chuàng)建WebSocket實例斩熊,連接到服務(wù)器往枣。
處理連接狀態(tài):監(jiān)聽open、close、error事件分冈,處理連接的打開圾另、關(guān)閉和錯誤狀態(tài)。
發(fā)送消息:使用socket.send(data)方法向服務(wù)器發(fā)送消息雕沉。
接收消息:監(jiān)聽message事件集乔,處理從服務(wù)器接收到的消息。
斷開連接:使用socket.close()方法斷開WebSocket連接坡椒。
24.小程序中bindtap和catchtap區(qū)別
??bindtap:默認的事件綁定方式扰路,單點擊組件并松開觸發(fā)bindtap事件,且向上冒泡倔叼,直到查到被處理或到達跟元素汗唱,如果父元素綁定了事件,子元素觸發(fā)之后也會觸發(fā)父元素的事件
catchtap:是一個特殊的事件綁定方式丈攒,主要作用為阻止事件冒泡
25.小程序有哪些數(shù)據(jù)傳遞的方法
??數(shù)據(jù)綁定:最基本的傳遞方式哩罪,在模版中使用{{ }}語法來綁定頁面的顯示數(shù)據(jù),在Page對象的data屬性中定義的數(shù)據(jù)
事件綁定:在組件中使用bind前綴的事件綁定肥印,可以將事件處理函數(shù)與組件事件關(guān)聯(lián)起來识椰,當用戶與組件交互時,觸發(fā)的事件會攜帶數(shù)據(jù)深碱,實現(xiàn)子傳父
組件間傳參:父頁面可以通過<my-component data-param="{{param}}"></my-component>的方式向子組件傳參腹鹉,子組件通過properties來接受這些參數(shù)
使用$emit和on(自定義事件,通過事件綁定和觸發(fā)來實現(xiàn))
App對象:在app.js里的App對象的globaData屬性可以用來存儲全局數(shù)據(jù)敷硅,在任何頁面都可以訪問
使用微信小程序的本地存儲API:wx.setStorageSync和wx.getStorageSync
26.vue中Class與Style如何動態(tài)綁定
??可以使用:來動態(tài)綁定class和style
語法:<div :class="{ action:isAction }"></div>
27.vue中的mixins有何作用功咒,如何使用
??代碼復(fù)用,邏輯封裝绞蹦,行為一致性
可以定義混入力奋,組件中使用混入,全局混入(一般不建議)
28.vue中的transition動畫有哪些作用幽七,如何使用
用于添加進入和離開的動畫效果
css:transition: opacity .5s
html:用<transition>把需要過渡的元素包括起來
29.ES6有哪些新特性
Promis 擴展運算符 模版字符串 結(jié)構(gòu)賦值 箭頭函數(shù) const和let symbol set和map Class Module
30.Promise是什么景殷,有什么作用
es6新特性,為了解決回調(diào)地獄澡屡,特點是狀態(tài)不受外界影響(有進行中(padding)猿挚、已成功(fulfilled)、已結(jié)束(redected)三種狀態(tài))且狀態(tài)不可逆
31.什么原因會造成內(nèi)存泄漏
閉包:(如果閉包中的變量一直被引用驶鹉,外部函數(shù)執(zhí)行完畢也不會被垃圾回收導(dǎo)致)
全局變量:(因為全局變量在程序的生命周期都是可訪問的绩蜻,不會垃圾回收)
未移除的事件監(jiān)聽器:(在為dom元素創(chuàng)建事件監(jiān)聽器時,js會創(chuàng)建一個指向該元素的引用室埋,如果監(jiān)聽器在不需要的時候沒被移除办绝,即時dom元素銷毀伊约,也會保留對該元素的引用,因為dom元素雖然不在了但是引用還在孕蝉,使得垃圾無法回收)
定時器:(類似事件監(jiān)聽器屡律,定時器也會創(chuàng)建相關(guān)函數(shù)變量的引用,如果定時器設(shè)置后沒被清除昔驱,引用就會存在疹尾,導(dǎo)致內(nèi)存泄漏)
32.v-show和v-if的指令區(qū)別是什么
v-show為操作display屬性進行隱藏,v-if是直接把元素從dom樹中移除骤肛,在開發(fā)中為了新能優(yōu)化纳本,若條件變化不多則使用v-if,反之用v-show
33.vue2 對象及數(shù)組 數(shù)據(jù)改變 視圖不改變(響應(yīng)式時效)
對象使用this.set可以解決腋颠,數(shù)組使用
34.vue2中 onMounted 對應(yīng)js中什么函數(shù)
window.onload()
35.有三個接口繁成,要求只有前面兩個接口調(diào)用成功了 ,才能調(diào)用第三個接口
Promise.all監(jiān)聽前面兩個函數(shù)
36.數(shù)組有哪些方法淑玫,有啥功能
??includes():判斷數(shù)組中是否存在某個元素巾腕,存在返回true否則返回false
filter():建一個新數(shù)組,其包含通過測試的所有元素
map():創(chuàng)建一個新數(shù)組絮蒿,數(shù)組中的元素為原始數(shù)組元素調(diào)用函數(shù)處理后的值
forEach():對數(shù)組中的每個元素執(zhí)行提供的函數(shù)
37.怎么解決跨域
? 在webpack或vite的config配置文件中可以設(shè)置proxy代理
? 使用JSONP借助回調(diào)函數(shù)解決跨域
? 服務(wù)器端:服務(wù)器配置cors開啟允許跨域尊搬、Nginx 服務(wù)器反向代理
38.組件封裝思路
? 明確組件職責:每個組件應(yīng)該有明確的職責,盡量做到單一職責原則土涝。組件的功能應(yīng)該盡可能單一佛寿,這樣可以提高組件的復(fù)用性和可維護性。
? 組合組件:通過組合多個小組件來構(gòu)建更復(fù)雜的組件但壮。這樣的小組件可以獨立開發(fā)冀泻、測試和維護,同時也能提高代碼的可讀性蜡饵。
? 組件通訊與插槽:props/emit弹渔、slots插槽、provide/inject 注入
? 確保組件之間的樣式隔離
39.常用指令優(yōu)先級
? v-for v-if : v2中v-for高于v-if v3中 v-if高于v-for
? 如果一定要同時使用則在外層包裹一個 <template> 在其上使用v-for溯祸, 內(nèi)層包裹v-if
40.http 401 403 301 303 分別代表什么
401:沒有認證
403:有認證肢专,但沒有權(quán)限
301:訪問的資源轉(zhuǎn)移,會返回location頭焦辅,指明新的url
303:比如get post請求方法使用錯了
41.重繪和回流 是什么意思 有什么功能
重繪改變元素的外觀屬性鸟召,比如:顏色,背景顏色氨鹏,邊框顏色
回流是改變元素的大小,可能會dom樹重建
42.vux actions 為什么是異步的
它是被設(shè)計成異步的压状,原因為:分離關(guān)注點仆抵、用戶界面更新跟继、鏈式調(diào)用、promise支持镣丑、更好的測試性
43.css的 : 和 :: 有啥區(qū)別
單冒號:偽類
雙冒號:偽元素
44.微信小程序授權(quán)登陸 解釋一下
不需要用戶輸入賬戶密碼舔糖,點擊授權(quán)微信生成一個臨時的code,通過回調(diào)函數(shù)傳給小程序