javaScript的断点工具函数(利用闭包)

要点:闭包能够把外围函数的调用对象保留起来,调用对象包含外围函数此时的局部变量(函数参数和局部变量),

            因此,在闭包里访问外围函数的局部变量的值为此时函数的的局部变量值。

<script>
	/**
	  * 断点功能
	  *	摘自《javaScript权威指南》,最终出处Steve Yen
	  * 见http://trimpath.com/project/wiki/TrimBreakpoint
	  *
	  * 使用window.prompt来阻塞浏览器,使函数断点。使用
	  * inspector来获取变量值。
	  */
	function inspect(inspector,title){
		var expression,title;
		if("ignore" in arguments.callee) return;
		while(true){
			var message = "";
			if(title) message = title+"\n";
			if(expression) message += "\n" + expression + " ==> " + result + "\n" ;
			else expression = "";
			message += "Enter an expression to evaluate:";
			/* window.prompt(message,default) 第一个参数为显示的信息,第二个参数为
			 * 输入框的默认值,返回值为用户输入的字符串
			 */
			expression = prompt(message,expression);
			if(!expression) return;
			result = inspector(expression);
		}
	}
	
	/* 以下是一个求阶函数,它是一个使用insepct函数来断点的例子,其实每次调用inspect
	 * 都是一次断点。其中调用前要用到inspector函数,用它来获取变量值。*/
	function factorial(n){
		var result =1;
		/* 闭包,把外围函数的调用对象(包含所有函数参数和局部变量)
		 * inspector函数把此时的factorial的调用对象保留起来,但调用
		 * inspector时,它的作用域链里的第二个对象就是此时factorial
		 * 的调用对象,此次,当inspector访问一个外围函数的变量(如
		 * result)时,此时外围函数result的值是什么就返回什么,达到
		 * 实时观察的效果。
		 */
		var inspector = function($){return eval($);} 
		inspect(inspector,"Entering factorial()");
		while(n > 1){
			result = result*n;
			n--;
			inspect(inspector,"factorial() loop");
		}
		inspect(inspector,"Exiting factorial()");
		return result;
	}
	
	//运行函数,看断点效果。
	factorial(2);

</script>







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值