通过字符串访问局部范围的变量——除了 eval?

Access to locally scoped variable via string – anything but eval?

请考虑这个片段:

let variableName = 'internalVariable';
{
  let internalVariable = 'whatever';
  console.log(eval(propertyKey)); // prints 'whatever'
}

通过 variableName 中存储的字符串访问 internalVariable 我有哪些选择?我希望有 scope[variableName] 之类的东西,但似乎没有。

鉴于这种特殊情况,是否有使用 eval 的替代方法?

在需要动态访问变量的情况下,惯用的做法是使用一个对象并根据需要动态计算属性名称。

var obj = {};

obj[getPropertyName()] = "hello world";

在带有 varletconst 的函数中声明的变量确实作为对象之类的属性存在(函数调用的闭包),但是 JavaScript 不提供任何将那个东西称为对象的方法。使用 eval() 是可能的,但通常这是一个坏主意,因为在现代运行时系统中不会尝试运行时优化,因为 eval() 使它变得非常复杂。

变量在 JavaScript 中别名的唯一方法是通过 arguments 对象,这很奇怪,在 "strict" 模式下明确不鼓励这样做。

[edit] — 在 re: Bergi 下面的评论中,(通常不推荐使用的)with 语句允许隐式引用对象属性,并且模块的 export 机制可以创建别名,尽管我很难想象在实际实践中是一件好事。