首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript window.hasLoaded 與 window.loading 全局變量的用途解析

     編輯:程式設計綜合問答

現象

在瀏覽器控制台檢查 window 對象時,發現自定義屬性 hasLoaded 和 loading,疑惑其含義。

本質解析

  • 非標準屬性:這兩個屬性**不是**瀏覽器原生 API,而是開發者或第三方庫**自定義的全局標記**。
  • 典型用途:防止重複初始化、標識頁面/資源加載狀態。

常見使用模式

// 頁面入口腳本
if (window.hasLoaded) {
    console.log('頁面邏輯已初始化,跳過重複執行');
} else {
    window.loading = true;  // 標記正在加載
    initApp().then(() => {
        window.loading = false;
        window.hasLoaded = true; // 標記加載完成
    });
}

// 其他腳本檢查狀態
function useSharedResource() {
    if (window.loading) {
        // 等待初始化完成
        return waitFor(() => !window.loading).then(useSharedResource);
    }
    if (!window.hasLoaded) {
        throw new Error('核心模塊未就緒');
    }
    // 正常使用共享資源
}

對比:原生加載事件

機制觸發時機適用場景
window.onload所有資源 (圖片、CSS、JS) 加載完成需等待圖片尺寸計算等
DOMContentLoadedDOM 解析完成,不等待資源早期初始化 UI、綁定事件
window.hasLoaded (自定義)業務邏輯初始化完成 (可異步)模塊間依賴協調、單頁應用路由守衛

最佳實踐建議

  • 命名規範:使用項目前綴避免衝突,如 window.MYAPP_hasLoaded。
  • 封裝狀態機:用 Promise/async-await 替代布爾標記,如 window.appReady = initApp(),其他模塊 await window.appReady。
  • 避免污染全局:模塊化構建 (Webpack/Rollup) 時盡量不掛載 window,通過 export/import 共享狀態。

調試技巧

// 控制台查看所有自定義 window 屬性
Object.keys(window).filter(k => !['chrome','document','navigator'...].includes(k))
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved