• 在函数内部,有两个特殊的对象:arguments和this。其中,argument是一个类数组对象,包含着传入函数中的所有参数,它的主要用途是用来保存函数参数。

计算阶乘函数代码如下:

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

为了减少函数执行与函数名的耦合,可以使用arguments属性。

  • 其中,callee是arguments的一个属性,该属性是一个指针,指向拥有这个arguments对象的函数。

当函数在严格模式下运行时,访问arguments.callee会导致错误。

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

在这个重写后的 factorial()函数的函数体内,没有再引用函数名 factorial。这样,无论引用 函数时使用的是什么名字,都可以保证正常完成递归调用。例如

function factorial(num){if(num <= 1){return 1;}else{return num * arguments.callee(num-1);}}var trueFactorial = factorial;alert(trueFactorial(5));    //120    factorial = function() {return 0;}                alert(trueFactorial(5));// 120 如果没有使用arguments.callee,将返回0

在此,变量 trueFactorial 获得了 factorial 的值,实际上是在另一个位置上保存了一个函数 的指针。然后,我们又将一个简单地返回 0的函数赋值给 factorial 变量。如果像原来的 factorial() 那样不使用 arguments.callee,调用 trueFactorial()就会返回 0。可是,在解除了函数体内的代 码与函数名的耦合状态之后,trueFactorial()仍然能够正常地计算阶乘;至于 factorial(),它现 在只是一个返回 0的函数。

js 实现经典阶乘函数的计算相关推荐

  1. 2020-12-09 深度学习 经典CNN模型计算量与内存需求分析

    经典CNN模型计算量与内存需求分析 表1 CNN经典模型的内存,计算量和参数数量对比 AlexNet VGG16 Inception-v3 模型内存(MB) >200 >500 90-10 ...

  2. JS之经典for循环闭包问题解决方法

    JS之经典for循环闭包问题解决方法 参考文章: (1)JS之经典for循环闭包问题解决方法 (2)https://www.cnblogs.com/zhumingyong/p/8994636.html ...

  3. Js基础——变量类型和计算

    JS基础--变量类型和计算 一.基本数据类型 二.引用类型 三.typeof判断数据类型 四.浅拷贝与深拷贝 4.1 浅拷贝 4.2 深拷贝 五.数据类型转换 5.1== 和 === 一.基本数据类型 ...

  4. vue.js中经典扫雷游戏的实现

    可视化 (vue-defuse) An implementation of the classical minesweeper game in vue.js. vue.js中经典扫雷游戏的实现. Vi ...

  5. vue计算多列和_vue.js的简单自动求和计算实例

    一.导入vue.js 二.前端页面 我用了一个表格,话不多说直接上代码 数学 物理 英语 总分 {{sum}} 平均分 {{average}} 二. js代码 1.创建一个 vue容器 在el中写你的 ...

  6. js将时间转换为时间戳计算

    js将时间转换为时间戳计算 var qsrq = "2021-06-09 10:00";var jsrq = "2021-06-09 12:10";qsrq = ...

  7. 用9种办法解决 JS 闭包经典面试题之 for 循环取 i

    2017-01-06 Tomson JavaScript 转自 https://segmentfault.com/a/1190000003818163 闭包 1.正确的说,应该是指一个闭包域,每当声明 ...

  8. JS两个日期之间计算时间差

    一.计算两个日期之间相差的毫秒数(也就是两个日期的时间戳差) 这里有几种常见的JS方式,来获得日期的毫秒数. 1.日期对象的 getTime();方法 <script>var date = ...

  9. JS 日期的获取和计算 ios不兼容问题

    之前在做项目 需要页面上进行日期的计算,从页面上抓取到开始日期,根据天数来计算结束日期,本来觉得很简单,于是JS 中定义一个变量 var valDate = new Date($("#sta ...

最新文章

  1. 一招修复内存不能read_read文件一个字节实际会发生多大的磁盘IO?
  2. matlab 数据降维和重构_核主成分分析(Kernel PCA, KPCA)的MATLAB 实现
  3. 网页同步交互和异步交互的区别?
  4. 2020年推荐系统工程师炼丹手册RecSys-Long Paper版
  5. java.sql.SQLException: Before start of result set ---错误笔记
  6. 厉害了!祝贺PolarDB喜提科技进步一等奖
  7. add-migration Build failed.
  8. Process打开文件
  9. python输出图像plt_Matplotlib(pyplot)savefig输出空白图像
  10. mysql手册04_视图
  11. Xshell 5 注册码
  12. 湿空气性质计算,随笔与学习记录(2.水蒸气分压,含湿量,相对湿度)
  13. 收藏:关于3g手机的市场调查报告
  14. android游戏手柄怎么用,王者荣耀怎么用手柄玩?手柄游戏详细教程
  15. JQuery学习04篇(层次选择器)
  16. 1957-挂盐水的故事
  17. 【数据中台】数据中台架构搭建百科全书
  18. 从购买ECS到SpringCloud项目的自动化部署及发布
  19. Android美化插件,Android控件美化Shape
  20. ABAP SE54 视图簇

热门文章

  1. Java 做相关性分析
  2. YOLOv5首发改进最新CVPR2023主干FasterNet系列:实测私有数据集mAP有效涨点,同时降低参数量|为更快的神经网络追求更高的 FLOPS,参数量下降,超越其他轻量化模型
  3. 商汤科技积极复工,将大力投入数字哨兵的产能和部署
  4. Maxthon:拖拽的妙用(转)
  5. Nand Flash结构及错误机制
  6. Linux 命令(180)—— renice 命令
  7. 不想开学,17岁熊孩子PS“校长东莞嫖娼被抓”
  8. Android8.1--PackageInstaller
  9. GPU——“图形处理器”
  10. 计算机大一期末知识,《计算机理论基础》最全知识点总结 大一上期末考试必备...