zoukankan      html  css  js  c++  java
  • 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
    


  • 相关阅读:
    jq 京东跳楼效果
    *Sum of NestedInteger
    **Minimum Window Substring & String类问题模板
    **Word Ladder
    *Longest Increasing Subsequence
    *Kth Largest Element in an Array
    *Permutations II
    *Implement Stack using Queues
    *Paint House II
    *Paint Fence
  • 原文地址:https://www.cnblogs.com/bhlsheji/p/5377710.html
Copyright © 2011-2022 走看看