原创 什麼叫暫時性死域

在 JavaScript 中,當一個函數被調用時,會創建一個執行上下文(execution context),該上下文中包含函數的作用域(scope),並將其推入執行上下文棧(Execution Context Stack)中進行管理。當函

原创 Yield語法使用

const combineAsyncError = tasks => {     const doGlide = {}     const handler = res => {         doGlide.out = res

原创 html to canvas to images

html2canvas 是一種將 HTML 元素轉換爲 canvas 元素的 JavaScript 庫,它的原理是通過遍歷 HTML 元素,將元素的內容繪製到 offscreen 的 canvas 上,最終通過 canvas 的 toDat

原创 爲什麼js引擎是單線程?

爲什麼js引擎是單線程? js的主要用途是與用戶互動,以及操作DOM,這決定它只能是單線程。例:一個線程要添加DOM節點,一個線程要刪減DOM節點,容易造成分歧。 爲了更好使用多CPU,H5提供了web Worker 標準,允許js創建多線

原创 最大安全整數

在 JavaScript 中,最大安全整數是2^53-1,即9007199254740991。這是因爲在 JavaScript 中,整數和浮點數的存儲方式是一樣的,都是採用 IEEE 754 雙精度浮點數表示,但整數必須存儲在 53 位之內

原创 call 和 apply有什麼區別

call和apply都是function原型上的方法,每一個函數作爲function的實例都可以調用這兩個方法, 這兩個方法的目的都是改變函數的this指向並且讓函數執行的。 唯一的區別就是call時需要一個個傳參數,而apply時將參數以

原创 web worker進程和線程的區別,Chrome 中有哪些常⻅進程,如果我有⼀個耗時很⻓的同步計算任務,如何讓 JS 代碼達到多線程併發執⾏的效果

進程(Process)和線程(Thread)都是操作系統中用於多任務處理的概念。簡單地說,一個進程就是一個程序的執行空間,而一個線程則是在執行空間內獨立運行的執行路徑。 區別: 進程是系統分配資源的最小單位,線程是操作系統調度的最小單位。

原创 怎麼判斷循環引用?

判斷循環引用的方式主要有兩種: 可以使用 JSON.stringify() 方法將對象轉爲字符串,在轉化過程中,JSON.stringify() 方法會檢測對象中是否存在循環引用。如果存在循環引用,則轉化會出現異常,捕獲到異常後即可判斷出

原创 數組插入數據的方法?

JavaScript 有很多種方法可以向數組中插入數據,以下列舉了幾種常用的方法: push():向數組末尾添加一個或多個元素。 複製let arr = [1, 2]; arr.push(3); console.log(arr); //

原创 proto 可以等於 prototype 嗎

__proto__ 和 prototype 是不同的概念,它們不應該被混淆或等同使用。 prototype 是函數對象(Function)特有的一個屬性,函數對象通過它來實現對象的繼承。函數對象的 prototype 屬性指向一個原型對象,

原创 0.1+0.2 爲什麼不等於0.3

在 JavaScript 中,0.1 和 0.2 都是小數,它們實際的二進制表示時可能是無限循環或者近似值的。而當兩個近似值的小數進行數值計算時,由於數值的精度只有 53 位,會產生舍入誤差,從而導致計算結果不準確。 例如,在 JavaSc

原创 介紹一下vite

Vite 不是基於 Webpack 的工具,而是一個基於 Rollup 的工具,用於快速構建現代化的 Web 應用程序。 Vite 採用了類似 Vue.js 的單文件組件(SFC)的開發模式,支持 Vue 3、React、Preact、Sv

原创 vite

劣勢 優勢 打包快 預打包 第三方庫預打包 通過瀏覽器去做打包esmodule? webpack 遷移到 vite magic commit (webpack) rollup 特性 在開發環境中,一個 impor

原创 前端工程化實踐

prettier eslint eslint-loader githooks precommit commitlint CICD -> jetbrain 如何自動部署 webpack/rollup ->

原创 githooks

.git/hooks git在提交之前走一遍git/hooks裏面的勾子 如何跳過githooks git commit --no-verify