如何在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
相关产品推荐
相关产品推荐

