Javascript中递归与C++,Java,C#等有很大不同,自身经历,浪费两天。

function getSubmenu(submenu)
{
   var menustr="";
   for(var i=0;i<submenu.length;i++)
	{
	         var menu=submenu[i];
	         var str="";	
	        if(!menu.submenu||menu.submenu.length==0)
	        {
	        	var toggleStr="";
	           	  if(menu.toggle==0)
	              {
	                  toggleStr="disabled";
	              }	              	
	              str='<li class="stick '+toggleStr+' "><a menuid='+menu.id+' action='+menu.action+' href="#"><i class='+menu.icon+'></i>'+menu.name+'</a></li>'  ;   
	        }
	        else
	     {
	        	var toggleStr="";
		         if(menu.toggle==0)
		           {
		                toggleStr="disabled";
		           }
	              str='<li class="stick '+toggleStr+' "><a menuid='+menu.id+' action='+menu.action+' class="dropdown-toggle" href="#"><i	class="'+menu.icon+'"></i>'+menu.name+'</a><ul class="dropdown-menu" data-role="dropdown">'+arguments.callee(menu.submenu)+'</ul></li>';
	        }
	        menustr=menustr+str;
	}
	return menustr;
}

在写自动生成菜单的时候,本以为按C++方式写递归就没什么事了,可是发现怎么搞,都只能读到数组中第一个值,经过资料搜索与整理,特写出来以警示以后。

其中最关键是调用的时候如果用该函数名的话,就会丢失现场(我遇到的是顶级现场,奇怪的是后续的现场又没有问题),而只能用

arguments.calleefunction getSubmenu(submenu)

进行调用。

参考了:

1.Javascript递归解决方案http://www.nowamagic.net/javascript/js_RecurrencePlot.php

2.https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments/callee


你可能感兴趣的:(Javascript中递归与C++,Java,C#等有很大不同,自身经历,浪费两天。)