2013-05-19 102 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