2015-10-28 54 views
1

我正在研究一個簡單的調試函數,該函數計算閉包並獲取node.js中的所有相關變量名稱。它應該在運行時工作。那麼,有沒有辦法在閉包中自動捕獲所有的變量名? 例如,在下列情況下是否可以知道「b」,「c」和「d」變量的存在?node.js捕獲閉包變量

var d=3; 
function a(c){ 
    var b = true; 
    eval(debug(/* need to access in runtime something like ["b","c","d"] */)); 

} 
function debug(vars){ 
    var txt = ""; 
    for(var i=0; i<vars.length; loop++){ 
     txt+="console.log('"+vars[i]+":' + " vars[i] + ");" 
    } 
    return txt 
} 

我可以用蠻力掃描a.toString()搜索所有的「VAR」和所有參數的參數,但有一個本地函數來找到它還是一個特殊的變量(像被叫。vars)在閉包中查找變量名稱?

我知道「eval」是一個很大的不,但我只是在開發環境中使用它。

+1

在運行時?不可以。您可以進行靜態分析並測試您的代碼,但那也只能幫助您。 –

+0

可能重複:http://stackoverflow.com/questions/2336508/javascript-get-access-to-local-variable-or-variable-in-closure-by-its-name –

+0

你試過調試器嗎? – Xufox

回答

0

是的。只需返回一個函數來關閉c併爲該閉包設置另一個變量。喜歡這個。

function a(c){ 
 
    var b = true; 
 
    return function() { 
 
     console.log(c); 
 
    }; 
 
} 
 

 
var d = a(false); // undefined 
 
d(); // false

+0

謝謝colecmc,但我不想存儲c變量的值,而是我需要知道它的名字,我會編輯我的問題來解釋它更好。 – tieblumer