2009-12-04 187 views
2

在你问...我不打算真的这样做。由于明显的原因,这是不好的做法。我只是好奇,如果有可能的话。函数范围内的变量变量

在JavaScript中,你可以用括号的语法,使可变的变量在全局范围:

var var_name = 'my_var', 
    var_value = 'my_value'; 

window[var_name] = var_value; 

alert(my_var); // Works! alerts user: 'my_value' 

但是,当你是一个函数内,并使用“无功”的关键字,变量你创建在本地的作用域是它们声明的函数。是否有一些可以与括号语法(如窗口)一起使用的对象来访问本地作用域变量?像这样的事情:

this_function[var_name] = var_value; 

我怀疑这是可能的,但认为我会问只是踢。

+0

有一些问题,你的代码 - 它提醒“我_var“而不是”my_value“。确实是 – Neall 2009-12-04 17:29:10

+0

。 'alert(my_var)'必须是spudly意图的,否则这个请求肯定没有意义。 – 2009-12-04 17:34:37

+0

已修复。谢谢内尔和大卫 – spudly 2009-12-04 17:42:30

回答

2

不,没有任何对象可以用来在函数上下文中访问var变量(即使它们是一个称为该执行上下文的“变量对象”的对象的属性;该对象没有显示的名称,因此无法访问直)。在全球范围内的事情有点特殊,你不应该依赖它(尽管规范确实定义了它)。如果您要访问这些变量作为全局对象的属性(window,在Web浏览器的情况下),明确地将它们分配给window性质,而不是使用var,为了清楚:

window.x = 'my value'; 

,或者如果你喜欢:

window["x"] = 'my value'; 

(这两个语句具有相同的结果,无论是创建/的window对象上设置了一个名为“X”的属性。)

+0

我几乎知道这将是答案。只是想听听别人的意见:p – spudly 2009-12-04 17:41:17

+0

尽管如果你想,你可以创建一个本地作用域*对象*,并以这种方式使用它,例如: 函数someFunc(){var 0,0; localVars = {}; localVars.variable1 ='Hello'; alert(localVars [“variable1”]); } 不完全确定你为什么要这样做,但对于JavaScript中的所有内容,我相信当其他方法过于冗长或不够灵活时,会有一些问题。 – Graza 2009-12-04 18:45:06

+0

+1关于*变量对象*,执行上下文创建概念并不是真正广为人知的......一篇更深入的文章:http://is.gd/5cxyl – CMS 2009-12-04 20:26:22