You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何使用let声明全局变量时window.variable返回undefined,var则不会?

var与let在全局作用域下和浏览器全局对象window的交互差异

代码示例

// 使用 var 声明全局变量
var val = 20;
console.log(window.val); // 输出: 20
// 使用 let 声明全局变量
let val = 20;
console.log(window.val); // 输出: undefined

核心差异说明

  • var声明的全局变量会绑定为window的属性
    在全局作用域用var声明变量时,该变量会自动成为浏览器全局对象window的同名属性,本质上等同于执行了window.val = 20,因此可以通过window.val直接访问变量值。

  • let声明的全局变量独立于window存在
    ES6引入的let(以及const)在全局作用域声明变量时,会将变量存储在独立的全局环境记录中,不会挂载到window对象上。这种设计是为了减少全局属性污染,避免意外覆盖window原有属性。这类变量依然是全局作用域的成员,可在页面任意作用域访问,但无法通过window对象获取。

内容的提问来源于stack exchange,提问作者Gopika Sreekumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:24:51