首页 > 解决方案 > 通过字符串访问局部范围的变量——除了 eval 之外的任何东西?

问题描述

请考虑这个片段:

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

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

鉴于这种特殊情况,是否有任何替代方法可以使用eval

标签: javascriptscopeeval

解决方案


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

var obj = {};

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

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

JavaScript 中变量别名的唯一方法是通过arguments对象,这非常奇怪,以至于在“严格”模式下明确不鼓励使用。

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


推荐阅读