2013-05-19 71 views
3

我遇到问题。我想获得当前的函数scrope。我有这个示例代码,我工作正常。获取当前函数的所有变量()范围

function nittle(){ 

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

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

} 

但它似乎不在功能范围内工作。在其外面工作。有没有解决办法?

谢谢。

+0

为什么你需要这样做?当然,'nittle()'函数可以直接引用它自己的变量。函数范围变量不会像全局变量一样被其他代码添加。 – nnnnnn

+0

@undefined我不能那样做。它的动态。是的,我知道我为什么问这个问题。 nnnnn否它不能。 – Kivylius

+0

@Jessica - 怎么样?我的意思是为什么不能用'nittle()'来访问它的局部变量。任何示例 ? – techfoobar

回答

1

我不知道有什么方法可以编程确定函数内部声明了哪些变量,除了可能使用nittle.toString()然后试图自己解析它以找到所有变量。 也许这可以为你工作? (但是这对我来说太乱了。) UPDATE:但是如果变量是通过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