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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值