JavaScript的最大函数参数长度和最大栈深度检测

一般代码或许不会涉及最大参数长度和最大栈深度,但某些特殊场合,检测这两个参数还是有必要的。例如:用递归计算斐波那契数列的第n个值,不了解最大栈深度,难免显得肤浅。又例如:将一串charCode转成String,不了解最大参数长度,采用字符串拼接的方式,效率提不上,特别是在串较长的情况下。

以下两个方法分别实现了JavaScript运行环境的 最大函数参数长度检测 和 最大栈深度检测。

不同浏览器的测试结果不同,同一款浏览器在不同机器测试结果不同,甚至某些浏览器连续测试时先后结果会有不同。

function getMaximumSupportedArgumentsLength(){
	var args={length:0};
	function noop(){}
	function test(n){
		args.length=n;
		try{noop.apply(null,args);}catch(e){return false;}
		return true;
	}
	function getNum(upTo){
		if(test(upTo)){
			return upTo;
		}
		var min=1,max=upTo,mid=Math.floor((min+max)*0.5);
		while(min<max){
			if(test(mid)){
				min=mid;
			}else{
				max=mid;
			}
			mid=Math.floor((min+max)*0.5);
			if(mid==min){
				break;
			}
		}
		return min;
	}
	return getNum(0xFFFFFFFF);
}
function getMaximumCallStackSize(){
	var size=0;
	function test(){
		size++;
		test();
	}
	try{
		test();
	}catch(e){
		return size;
	}
}

//Maximum Supported Arguments Length
//CH34 124782
//FF29 500000
//SF7  65536

//Maximum Call Stack Size
//CH34 20926 in <script>, 20804 in console
//FF29 21###(varies) in <script>, 49993 in console
//SF7  43517 in <script>, 43509 in console


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值