javascript - 通过字符串访问本地范围的变量——除了 eval 之外还有什么?

标签 javascript scope 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 声明的变量确实作为对象的属性存在(函数的闭包) call),但 JavaScript 不提供任何将该事物作为对象引用的方法。使用 eval() 是可能的,但通常这是一个坏主意,因为在现代运行时系统中不会尝试运行时优化,因为 eval() 使这变得非常复杂。

在 JavaScript 中为变量添加别名的唯一方法是通过 arguments 对象,这很奇怪,因此在“严格”模式下明确不鼓励这样做。

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

关于javascript - 通过字符串访问本地范围的变量——除了 eval 之外还有什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51367362/

相关文章:

javascript - 使用 cordova 下载 Youtube 视频

javascript - Highcharts 导出服务器 - 无法使用 --options 生成图像

javascript - AngularJS。 ng-repeat 中过滤器中的多个条件

python - `if name == "__main_ _"` 在 Python 中是什么意思?

javascript - 奇怪的 JavaScript 行为

function - Chrome - 评估 - 函数()

javascript - 样式和脚本未正确加载。为什么?

c++ - 为什么在作为值返回时在类内部定义结构需要范围解析?

php - 在 CodeIgniter 中不使用 Eval 来计算 php 中的表达式

javascript - 使用字符串参数执行函数