【发布时间】:2018-10-11 04:18:48
【问题描述】:
闭包之外的旧式 JavaScript var 声明是全局的(顶级范围),可以在浏览器中从 window 对象访问。例如,声明 var x = 3; 可以通过 window['x'] 访问。
在给定声明名称(字符串)的情况下,您如何类似地访问 const 或 let 声明?
var x = 3;
const y = 7;
let z = 21;
console.log('x = ' + window['x']); //x = 3
console.log('y = ' + window['y']); //y = undefined
console.log('z = ' + window['z']); //z = undefined
对于上面的例子,你如何得到 7 和 21 的“y”和“z”而不是 undefined?
修改代码:
https://jsfiddle.net/g78ah6we/
编辑(为清楚起见添加了注释):
1. 虽然不典型,但在某些用例中,例如在 library 中,有必要仅根据声明的名称访问声明。
2. 只需要读取权限(不会修改任何声明)。
3. 提到window 对象只是为了展示旧方法,但这个问题实际上并不是关于使用window 对象(或global 对象)。
【问题讨论】:
-
@CertainPerformance 这个问题是关于它们是否在全局对象上,我们已经知道它们不在。这个问题是关于如何解决这个问题的。
-
它们不在全局对象上,因此无法通过
window.y和window.z访问它们——这对我来说似乎是同一个问题? -
看来这个问题的唯一正确答案将涉及
eval,但所谓的 duplicate 甚至没有提到eval(在问题或任何答案)。很明显有些人认为这个问题无法回答。
标签: javascript browser constants variable-declaration window-object