【问题标题】:Get all variables of the current function() scope获取当前 function() 作用域的所有变量
【发布时间】:2013-05-14 02:13:14
【问题描述】:

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

function nittle(){

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

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

}

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

谢谢。

【问题讨论】:

  • 为什么需要这样做?当然nittle() 函数可以直接引用它自己的变量。其他代码不会像全局变量那样添加函数范围变量。
  • @undefined 我做不到。它是动态的。是的,我知道我为什么要问这个问题。 nnnnn 不,它不能。
  • @Jessica - 怎么样?我的意思是为什么不能在nittle() 中编码访问它的局部变量。有什么例子吗?
  • @techfoobar 因为eval()。我只是为了这个问题而简化它。
  • 像这样:jsfiddle.net/mEjCf/1

标签: javascript jquery function prototype instance


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 2011-08-08
    • 1970-01-01
    • 2012-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多