递归函数是在一个函数通过名字调用自身的情况下构成的。

 function factorail(num)
{
if(num <= 1)
{
return 1;
}
else{
return num * factorail(num-1);
}
}

上面的代码虽然经典,在全局函数变量作为其引用的情况下,很容易出错。

var anotherFactorial = factorail;

factorial = null;

alert(anotherFactorail(4));

上面问题可以通过 arguments.callee 来解决。

因此最开始的递归函数可以改写成,

  function factorail(num)
{
if(num <= 1)
{
return 1;
}
else{
return num * arguments.callee(num-1);
}
}

其中,arguments.callee 是一个指向正在执行的函数的指针。

然而在严格模式下,上述代码仍然会导致错误,此时的解决方案是,通过函数表达式来达到相同的结果。

 var factorial = (function f(num)
{
if(num <= 1)
{
return 1;
}
else
{
return num * f(num -1);
}
})

上面创建的是一个名为f() 的命名函数表达式

最新文章

  1. win32记事本程序(一)
  2. zabbix3.0安装【server】
  3. 《深入理解Bootstrap》勘误
  4. ASP.NET Web API 数据验证
  5. solr与.net系列课程(三)solr连接数据库
  6. C++中的static关键字(转)
  7. C#对HTML转译需要注意的问题
  8. (转)软件版本中的Alpha,Beta,RC,Trial是什么意思?
  9. ☀【单位】REM
  10. 一些不太常用的Linux命令
  11. 在Fragment中实现百度地图,定位到当前位置(基于SDKv2.1.0)
  12. two sets of Qt binaries into the same process的解决办法
  13. 自定义控件之--组合控件(titlebar)
  14. 201521123059 《Java程序设计》第十一周学习总结
  15. highcharts框架使用总结
  16. 如何在命令行中让python2和python3同存
  17. iframe父页面和子页面获取元素和js变量
  18. Django之富文本编辑器
  19. lr中错误解决方法19种
  20. 查询MYSQl数据表中的最后一条记录

热门文章

  1. CodeFirst模式开发涉及到mysql简单使用
  2. UVA 11624 Fire!【两点BFS】
  3. 洛谷——P1327 数列排序
  4. Codeforces 361D Levko and Array(二分)(DP)
  5. 水流(water)(BFS)(DFS)
  6. ASP.NET Core 2.2 基础知识(七) 选项模式
  7. 8.6(java学习笔记)类加载过程及类加载器
  8. Matlab与C++混合编程 编写独立外部应用程序时出现“无法定位序数3906于动态链接库LIBEAY32.dll上”错误
  9. iOS :学习新技术途径和sizeClasses屏幕适配
  10. PHP文件包含漏洞总结