3

我有问题。我想获取当前的函数范围。我有这个示例代码,我工作正常。

function nittle(){

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

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

}

但它似乎不在函数范围内工作。在它之外工作。有解决办法吗?

谢谢。

4

1 回答 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
于 2013-05-19T11:17:59.493 回答