【问题标题】:Access the outer scope's variables via bracket notation通过括号表示法访问外部范围的变量
【发布时间】:2015-08-06 20:23:04
【问题描述】:

显然内部函数可以访问外部作用域的变量,例如

function example() {
    console.log('My name is ' + name);
}

var name = 'Dave';
example();

是否可以使用括号表示法访问该变量?例如

function example() {
    console.log('My name is ' + outerScope['name']);
}

(对于那些想知道我为什么要这样做的人,这是为了一种潜在的调试技术,而不是实际的生产代码)。

【问题讨论】:

标签: javascript closures


【解决方案1】:

不,那是不可能的。范围是 JS 代码无法访问的对象,也没有属性。

您可以使用eval,但如果您想通过字符串的名称访问变量。或者,您应该检查您的运行时是否有可以使用的调试 API,它通常会公开此类信息。

【讨论】:

  • 你能举例说明我在这种情况下如何使用eval 吗?比如我上面的example()函数?
  • console.log('My name is ' + eval('name')) 应该这样做(当然它使用普通的标识符解析,你不能访问阴影变量或特定范围内的变量)。
  • 太棒了!这实现了我的目标。
  • 这样做很糟糕。如果你想要一堆用字符串中的变量名访问的命名变量:将它们捆绑为对象的属性。
  • @Quentin:当然是这样。我相信 OP 只使用它来探索“一种潜在的调试技术”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-01
  • 2016-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-23
  • 1970-01-01
相关资源
最近更新 更多