获取当前函数作用域中的所有变量

3

我有一个问题。我希望获取当前函数范围。我有这个示例代码正在工作。

function nittle(){

    var Pen = new Dot(); // Generated dynamical through eval()
    .....

    for(key in window) {
        if( window[key] instanceof Dot ){
            alert("found it");
        }
    }

}

但在函数作用域内似乎不起作用,只能在外部生效。有什么解决方法吗?

谢谢。


你为什么需要这样做呢?nittle()函数肯定可以直接引用自己的变量。函数作用域变量不会像全局变量那样被其他代码添加。 - nnnnnn
@undefined 我做不到。它是动态的。是的,我知道这一点,所以我才问这个问题。nnnnn 不行,它做不到。 - Kivylius
如果必须使用eval(),请确保它在作用域内有效。例如:在函数内部调用eval('Pen')将返回Pen的值。 - techfoobar
@techfoobar 请解释一下。 - Kivylius
1
像这样:http://jsfiddle.net/mEjCf/1/ - techfoobar
显示剩余5条评论
1个回答

1
我不知道有什么办法可以通过编程确定函数内声明了哪些变量,除非尝试使用nittle.toString()并尝试自行解析以查找所有变量。如果变量是通过eval()创建的,则无法使用该方法,您只能在函数的字符串表示中看到eval()语句。
“是否有解决方法?” 您可以在函数中声明一个单一对象,并将所有变量更改为该对象的属性:
function nittle() {
  var nittleVars = {
     var1 : "something",
     Pen : new Dot(),
     etc : "whatever"
  };

  for (var key in nittleVars){
    if( nittleVars[key] instanceof Dot ){
        alert("found it");
    }
  }
}

您的更新表明变量是使用eval()创建的 - 您仍然可以使用对象属性的想法来实现这一点:
  eval("nittleVars.newVar = new Dot()");  // inside the function

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接