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权威指南-读书笔记之:闭包调试器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.