function inspect(inspector,title){
var expression,result;
if("ignore" in arguments.callee)return;
while(true){
var message="";
if(title) message = title +"\n";
if(expression) message+= "\n" +expression +" ==> "+result +"\n";
else expressin="";
message +="Enter an expression to evaluate:";
expression = prompt(message,expression);
if(!expression)return;
result=inspector(expression);
}
}
function factorial(n){
var inspector =function ($){ return eval($);}
inspect(inspector,"Entering factorial()");
var result = 1;
while(n>1){
result=result*n;
n--;
inspect(inspector,"factorial() loop");
}
inspect(inspector,"Exiting factorial()");
return false;
}
factorial(4);
閉包 var inspector =function ($){ return eval($);} //使用這個閉包來捕獲一個函數中的當前作用域(包括局部變量和函數的參數),並將它與全局的eval()函數組合起來,從而允許察看作用域。eval()得到javascript代碼的一個字符串並返回其結果。通過把這個閉包傳遞給inspect函數,從而在函數中創建一個斷點。inspect()函數使用了 window.prompt()方法向用戶顯示文本,並允許他們輸入一個字符串。
JavaScript權威指南-讀書筆記之:閉包調試器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.