2024-04-16 前端面試題

1.閉包

什么是閉包,嚴格來說要滿足四個條件
1.有函數(shù)嵌套
2.內部函數(shù)引用外部作用域的變量參數(shù)
3.返回值是函數(shù)
4.創(chuàng)建一個對象函數(shù),讓其長期駐留

閉包的應用:可以實現(xiàn)數(shù)據的私有

let count = 0;
function add(){
    count++
    console.log(count)
}
add()
//但是整個count是全局變量,很容易被修改

function fn(){
    let count = 0;
    function fb(){
         count++
         console.log(count)
    }
    return fb
}
let result = fn()  //完成這一句才算是閉包
result() //1
result() //2

    //實現(xiàn)了數(shù)據私有,無法直接修改count

2.事件循環(huán)

1.js是單線程,防止代碼阻塞,我們把代碼(任務):同步和異步
2.同步代碼給js引擎執(zhí)行,異步代碼交給宿主環(huán)境
3.同步代碼放入執(zhí)行棧中,異步代碼等待時機成熟送入任務隊列排隊
4.執(zhí)行棧執(zhí)行完畢,回去任務隊列看是否有異步任務,有就送到執(zhí)行棧執(zhí)行,反復循環(huán)查看執(zhí)行,這個過程是事件循環(huán)。

3. 宏任務和微任務

js把異步任務分為宏任務和微任務

1.同步代碼(js執(zhí)行棧/回調棧)
2.微任務的異步代碼(js引擎)
process.nextTick
Promise.then catch() Promise本身同步,then/catch的回調函數(shù)是異步中的微任務
Async/Await
Object.observe等等
3.宏任務的異步代碼(宿主環(huán)境)
script(代碼塊)
setTimeout / setInterval 定時器
setImmediate 定時器

3.原型和原型鏈

原型:每個函數(shù)都有prototype屬性稱之為原型
因為這個屬性的值是個對象,也稱為原型對象
作用:
1.存放一些屬性和方法
2.在javasscipt中實現(xiàn)繼承

const arr = new Array(1,2,3)
arr.reverse()
console.log(arr.__protp__ === Array.prototype) //true
Array.prototype 原型  中有reverse 方法
構造函數(shù)Array
實例arr

原型鏈:對象都有__proto__屬性,這個屬性指向它的原型對象,原型對象也是對象,也有__proto__屬性,指向原型對象的原型對象,這樣一層一層形成的鏈式結構稱為原型鏈,最頂層找不到則返回null

4.如何判斷兩個對象相等

2.Object.keys()

function areObjectsEqual(obj1, obj2) {
  const keys1 = Object.keys(obj1);
  const keys2 = Object.keys(obj2);
 
  if (keys1.length !== keys2.length) {
    return false;
  }
 
  for (let key of keys1) {
    if (obj1[key] !== obj2[key]) {
      return false;
    }
  }
 
  return true;
}
 
const obj1 = { name: 'Alice', age: 25 };
const obj2 = { name: 'Alice', age: 25 };
const obj3 = { age: 25, name: 'Alice' };
 
console.log(areObjectsEqual(obj1, obj2)); // true
console.log(areObjectsEqual(obj1, obj3)); // false

3.ES6 Object.entries(obj).toString()

const obj = { name: 'xiaoming', age: 'seven',sex: 'man', grade: 'four' };
const obj2 = { name: 'xiaoming', age: 'seven',sex: 'man', grade: 'four' };
console.log(Object.entries(obj).toString() == Object.entries(obj2).toString())

5.nextTick的原理

nextTick 是 Vue 提供的一個異步方法,用于在 DOM 更新之后執(zhí)行回調函數(shù)。它的原理是利用 JavaScript 的事件循環(huán)機制來實現(xiàn)異步執(zhí)行

6.vue的優(yōu)缺點

優(yōu)點:

  1. 簡單:官方文檔很清晰,比 Angular 簡單易學。
  2. 快速:異步批處理方式更新 DOM。
  3. 組合:用解耦的、可復用的組件組合你的應用程序。
  4. 緊湊:~18kb min+gzip,且無依賴。
  5. 強大:表達式 & 無需聲明依賴的可推導屬性 (computed properties)。
  6. 對模塊友好:可以通過 NPM、Bower 或 Duo 安裝,不強迫你所有的代碼都遵循 Angular 的各種規(guī)定,使用場景更加靈活。
    缺點:
    不支持IE8。
    Vue.js 不支持 IE8 及其以下版本,因為 Vue.js 使用了 IE8 不能模擬的 ECMAScript 5 特性。Vue.js 支持所有兼容 ECMAScript 5 的瀏覽器。
    vue是單頁面頁面,對于搜索引擎不友好,影響seo.因此不適合做公司官網。比如兩個vue路由(頁面),它的路徑是這樣的:index.html#aaa 和 index.html#bbb,但對于搜索引擎來說,都是同一個頁面,就是index.html。這樣搜索引擎就無法收錄你的頁面。

7.生命周期

1.又名:生命周期回調函數(shù)、生命周期函數(shù)、生命周期鉤子
2.是什么:vue在關鍵時刻幫我們調用的一些特殊名稱的函數(shù)
3.生命周期函數(shù)的名字不可更改,但函數(shù)的具體內容是程序員根據需求編寫的
4.生命周期函數(shù)中的this指向是vm或組件實例對象

beforeCreate 此時:無法通過vm訪問到data中的數(shù)據、methods中的方法
created 此時:可以通過vm訪問到data中的數(shù)據、methods中配置的方法
beforeMount 此時:1.頁面呈現(xiàn)的是未經Vue編譯的DOM結構 2.所有對DOM的操作,最終都不奏效
mounted 此時:1.頁面中呈現(xiàn)的是經過Vue編譯的DOM 2.對DOM的操作均有效(盡可能避免)。至此初始化過程結束,一般在此進行:開啟定時器、發(fā)送網絡請求、訂閱消息、綁定自定義事件等初始化操作
beforeUpdate 此時:數(shù)據是新的,但頁面是舊的,即:頁面尚未和數(shù)據保持同步
updated 此時:數(shù)據是新的,頁面也是新的,即:頁面和數(shù)據保持同步
beforeDestroy 此時:vm中所有的:data、methods、指令等待,都處于可用狀態(tài),馬上要執(zhí)行銷毀過程,一般在此階段:關閉定時器、取消訂閱消息、解綁自定義事件等收尾操作
destroyed

activated 路由組件被激活時觸發(fā)
deactivated 路由組件失活時觸發(fā)
nextTick

vue3中 beforeUnmount和unmounted代替beforeDestroy 和destroyed

常用的生命周期鉤子:
1.mounted/發(fā)送ajax請求、啟動定時器、綁定自定義事件、訂閱消息等【初始化操作】。
2.beforeDestroy:清除定時器、解綁自定義事件、取消訂閱消息等【收尾工作】。

8.vue組件之間通信

在Vue中,組件間通信主要有以下幾種方式:

1.父子組件通信:props / emit 2.子父組件通信:emit / v-on
3.兄弟組件通信:EventBus / Vuex
4.跨多層組件通信:EventBus / Vuex / provide / inject
5.Vuex:狀態(tài)管理,適合大型應用
vuex:vuex相關 - 簡書 (jianshu.com)
6.EventBus:創(chuàng)建一個事件中心,用emit觸發(fā)事件,用on監(jiān)聽事件
7.provide / inject:父組件提供數(shù)據,子組件注入數(shù)據,無需props和事件

9.less 在vue項目中如何全局引入

vue3.0配置less并使用全局變量_less全局變量如何引用-CSDN博客

10.微前端

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容