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

JavaScript 訪問未聲明變量與 window.a 的區別:作用域鏈與全局對象屬性

     編輯:程式設計疑難解答

現象

console.log(window.a); // undefined
console.log(a);        // ReferenceError: a is not defined

原理解析

  • window.a:訪問全局對象 window 的屬性 a。window 存在,屬性 a 不存在 → 返回 undefined,不拋錯。
  • a:標識符解析,在作用域鏈中查找變量 a。全局、函數、塊級作用域均無聲明 → 拋出 ReferenceError。
  • b.a:若 b 未聲明,直接拋 ReferenceError: b is not defined,不會嘗試訪問屬性。

核心結論

window 是全局對象的引用,屬性訪問遵循「對象存在、屬性不存在返回 undefined」;變量查找遵循作用域鏈,「未聲明即報錯」。這是 JS 設計的基本語義差異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved