JavaScript權威指南-讀書筆記之:閉包調試器

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()方法向用戶顯示文本,並允許他們輸入一個字符串。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章