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

为何函数作用域内用var声明的变量不在window对象中?

变量仅存在于局部作用域却不在window对象的深层原因

出现这种现象,核心是JavaScript的作用域规则和变量声明方式导致的,具体原因分这几种:

  • 块级作用域变量特性:如果age是用let或const声明的,不管是在if/for这类代码块还是函数局部作用域里,这类变量都属于块级作用域,不会被挂载到全局的window对象上。只有var声明的全局变量,才会自动成为window的属性。
  • 函数局部作用域隔离:只要age是在函数内部声明的(不管用var/let/const),它就被限制在函数的局部作用域中,作用域链仅覆盖函数内部,不会向上渗透到全局作用域,自然不会出现在window对象里。
  • ES模块的独立作用域:如果你的代码是通过<script type="module">加载的ES模块,哪怕是在模块顶级作用域声明的变量,也不会挂载到window——模块有自己的独立作用域,和全局作用域是完全隔离的。
  • 严格模式的限制:开启严格模式(代码顶部加'use strict')后,意外创建的全局变量(比如直接写age = 18而不声明)不会成为window的属性,反而会抛出错误,从根源上避免了隐式全局变量的问题。

举个直观的例子:

// 函数局部作用域的let变量,不会出现在window
function getAge() {
  let age = 28;
}
getAge();
console.log(window.age); // undefined

// 全局var变量会挂载到window
var globalAge = 30;
console.log(window.globalAge); // 30

内容的提问来源于stack exchange,提问作者Rudra Gaur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 22:52:03