javascript - 如何从闭包范围动态访问局部变量(通过其名称的字符串形式)?

标签 javascript closures

<分区>

在 Javascript 中,我习惯于使用 [] 运算符“动态地”访问已知命名空间中的变量(如果我在这里使用了错误的词,请纠正我)。例如(来自全局命名空间):

var a = 1;
window['a']; # => 1

或者来自对象类型的命名空间:

var a = { b: 1 };
a['b']; # => 1

而且我熟悉如何确定 this 的基础知识:

var a = function(){ return this['c']; };
var b = { c: 1 };
a.apply(b); # => 1;

但是在函数本身中,我如何访问我刚刚使用 var 实例化(或重新定义)的局部变量?

即,我希望以下函数调用返回 1调用 a:

function(){
  var a = 1;
  return a;
}

不能使用window['a'],因为a是在本地定义的,不能使用this['a'] 因为 this 根据调用函数的上下文而变化。

在实际情况下,我会简单地重构以避免动态创建和访问局部变量,因为无论如何这通常不是一个好主意,但作为一个学术问题,我很好奇是否可以访问 a 完全通过它的字符串名称。

最佳答案

您将局部变量(不是对象的属性)与属性(不是局部变量)混淆了。您的问题没有答案,或者更确切地说,答案是“无法完成”。

关于javascript - 如何从闭包范围动态访问局部变量(通过其名称的字符串形式)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5094862/

相关文章:

rust - 我如何克隆一个闭包,以便它们的类型相同?

javascript - Dijit 中的文本字段组

javascript - 如何在不刷新页面的情况下更新 session 存储数据?

javascript - 如何修复 Google Chrome 中未定义的 cookie 值?

javascript - 如果丢失调用对象,如何终止 setInterval()/setTimeout()?

swift - 运算符使用不明确 '>'

swift - 如何解释汇编调用堆栈中的快速(或一般)闭包?

ios - 字符串比较(>)在不同平台返回不同结果?

javascript - 从 ExtJS 4 迁移到 ExtJS 5

javascript - 如何在 JavaScript 中显示评论线程层次结构?