2015-05-04 33 views
0

我想知道JS函數的調用關係,通過獲取執行上下文或更具體的JS函數的作用域鏈。考慮這個例子:如何獲得V8引擎內的JavaScript函數的執行上下文

function one() { 

    var a = 1; 
    two(); 

    function two() { 

     var b = 2; 
     three(); 

     function three() { 

      var c = 3; 
      alert(a + b + c); 

     } 

    } 

} 

one()​; 

我想知道一個JS函數內的每個局部變量和函數聲明。我認爲JS函數的範圍鏈可能會給我提供我想要的信息。但是我不知道我在哪裏可以得到V8引擎中的函數範圍鏈。可以有人幫助我嗎?非常感謝!

回答

0

你可以使用(new Error()).stack爲:

console.log((new Error()).stack); 

這裏是去除誤導性的「錯誤」第一行代碼:在任何你想看到的是,調用序列

var callStackLines = (new Error()).stack.split('\n'); 
callStackLines.splice(0, 1); 
var callStack = callStackLines.join('\n') + '\n'; 
console.log(callStack); 
+0

對不起?我不理解你。你能更具體地告訴我嗎? – wangrl

+0

看起來你要找的東西叫做調試器。這裏已經有很多關於在stackoverflow上調試node.js的很好的答案。看看這個例子:http://stackoverflow.com/questions/1911015/how-to-debug-node-js-applications –

+0

其實我想在v8源代碼中設置鉤子並將掛鉤的信息寫入日誌文件。所以調試器可能不適合我。 – wangrl

0

點,你可以簡單地調用: console.trace();

+0

其實我所關注的腳本是在android webview中運行的。所以也許「console.trace()」不適合它。 – wangrl