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

如何在JavaScript嵌套函数dd中访问全局变量a

解决嵌套函数访问被遮蔽的全局变量问题

因为你在abc函数里声明了局部变量a,它会遮蔽全局作用域的a,所以嵌套的dd函数默认会向上找到abc里的a。要访问值为6的全局a,有几种可行的方法:

方法1:使用window.a(浏览器环境专属)

在浏览器里,用var声明的全局变量会挂载到window对象上,直接通过window.a就能访问全局的那个变量:

var a = 6;
function abc() {
  var a = 10;
  a += 1
  console.log(a) // 输出11
  function dd() {
    window.a += 1 // 操作全局的a
    console.log(window.a) // 输出7
  }
  dd()
}
abc();

方法2:使用globalThis.a(跨平台通用)

globalThis是ES2020引入的全局对象标准引用,不管是浏览器还是Node.js环境都能使用,兼容性更好:

var a = 6;
function abc() {
  var a = 10;
  a += 1
  console.log(a) // 输出11
  function dd() {
    globalThis.a += 1
    console.log(globalThis.a) // 输出7
  }
  dd()
}
abc();

方法3:在遮蔽前缓存全局变量

如果不想依赖全局对象,也可以在abc函数里先把全局的a存到一个不会被遮蔽的变量里,再在dd中使用:

var a = 6;
function abc() {
  var globalA = a; // 这里的a还是全局的,因为局部a还没声明
  var a = 10;
  a += 1
  console.log(a) // 输出11
  function dd() {
    globalA += 1
    console.log(globalA) // 输出7
  }
  dd()
}
abc();

注意:如果你的代码是在Node.js环境中,用var声明的全局变量不在window上,这时候用globalThis或者global.a(Node.js旧版本)更合适。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:35:10