JavaScript中如何在块级作用域内访问同名var声明的变量?
如何在块级作用域内访问外部var声明的变量?
可以实现,JS里没有像C++那样的作用域解析运算符,但有两种常用方法:
方法1:通过全局对象访问(仅适用于全局作用域的var变量)
如果你的var menu是在全局作用域声明的,它会被挂载到全局对象上(浏览器环境是window,Node.js或跨环境场景用globalThis),直接访问全局对象的属性就能拿到外部变量:
var menu="VarMenu" { let menu="LetMenu"; console.log(window.menu); // 输出 "VarMenu" // 跨环境通用写法 console.log(globalThis.menu); // 输出 "VarMenu" }
方法2:提前存储外部变量的引用
在块级作用域外部,把var声明的变量存到一个不受块内遮蔽影响的变量里,块内直接用这个别名访问:
var menu="VarMenu" const outerMenu = menu; // 提前保存外部变量的引用 { let menu="LetMenu"; console.log(outerMenu); // 输出 "VarMenu" }
为什么直接访问menu不行?
块内用let声明的menu会遮蔽外部的var变量,并且由于let的暂时性死区特性,块内任何位置的menu都会优先指向这个块级变量,无法直接绕过它访问外部的var变量。
结合你的开发场景示例
如果需要用外部菜单变量的值来初始化块内的新变量,可以这么写:
var menu="VarMenu" const outerMenu = menu; { // 基于外部菜单值创建嵌套菜单 let menu = `${outerMenu}-nested-div`; console.log(menu); // 输出 "VarMenu-nested-div" }
内容的提问来源于stack exchange,提问作者Sourabh Yadav
相关产品推荐
相关产品推荐

