1.递归

实现一:

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

但给factorial重赋值时,再调用就会出错。

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //TypeError: factorial is not a function

实现二:

使用arguments.callee解决上面问题。

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

修改factorial,再调用

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //24

实现三:

在严格模式下,不能通过脚本访问arguments.callee。解决办法,使用命名函数表达式。

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

以上代码创建了一个名为f()的命名函数表达式,然后将它赋值给变量factorial。

把函数赋值给另一个变量,函数的名字f仍然有效。这种方式在严格模式和非严格模式下都行得通。

var anotherFactorial = factorial;
factorial = null;
alert(anotherFactorial(4)); //24

2.闭包

转载于:https://www.cnblogs.com/yanyangbyou/p/3961276.html

JavaScript学习笔记(八)--- 函数表达式相关推荐

  1. 菜鸟教程-Javascript学习笔记-JS函数之前

    教程连接是: https://www.runoob.com/js/js-tutorial.html DOM(一些操作页面元素的方法) BOM(一些操作浏览器的方法) ################# ...

  2. Javascript学习笔记2——函数

    在Javascript中,function才是Javascript的第一型.当我们写下一段函数时,其实不过是建立了一个function类型的实体. 就像我们可以写成这样的形式一样: function ...

  3. javascript学习笔记(七) 函数

    1.函数内部属性 arguments arguments用来保存函数的参数,arguments.callee指向拥有arguments对象的函数 1 //阶乘 2 function factorial ...

  4. 《JavaScript语言精粹》学习笔记(函数(2))

    <JavaScript语言精粹>学习笔记(函数(2)) 函数(Functions) 参数(Arguments) 当参数被调用时,会得到一个"免费"的参数数组argume ...

  5. JavaScript学习笔记——函数 Part4:向函数传递函数、从函数返回函数(函数是一等公民)

    要点 函数是值,这个值就是函数引用 函数是一等公民:函数引用是一等值 可将函数引用赋给变量.含在数据结构(如对象)中.传递给其他函数或从其他函数返回 函数是一等公民 不要再认为函数是特殊的,有别于Ja ...

  6. JavaScript学习笔记(四)---闭包、递归、柯里化函数、继承、深浅拷贝、设计模式

    JavaScript学习笔记(四)---闭包.递归.柯里化函数.继承.深浅拷贝.设计模式 1. 匿名函数的使用场景 2.自运行 3.闭包 3.1前提: 3.2闭包 4.函数对象的三种定义方式 5.th ...

  7. JavaScript 学习笔记(二)

    JavaScript 学习笔记(二) 文章目录 JavaScript 学习笔记(二) 一 JSON 1. JSON 对象 什么是JSON对象 JSON对象与Javascript对象的区别 在JavaS ...

  8. JavaScript 学习笔记(1)

    1.     何为 Jscript JScript 是一种解释型的.基于对象的脚本语言. 局限性: 1)        不能使用该语言来编写独立运行的应用程序 2)        没有对读写文件的内置 ...

  9. JavaScript学习笔记04【高级——DOM和事件的简单学习、BOM对象】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  10. JavaScript学习笔记(三)--操作运算符

    JavaScript中的运算符有很多,主要分为算术运算符,比较运算符,逻辑运算符,三目运算符.一元运算符.位运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScript中的 ...

最新文章

  1. C++回声服务器_5-多进程版本
  2. Storefront与NetScaler的集成配置 - part1
  3. cdialog创建后马上隐藏_都2020了,你还没用上这些Windows的“隐藏神技能”?
  4. 波形捕捉:(7)“捕捉缓冲区”特效
  5. 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析
  6. 系统优化怎么做-数据库优化
  7. [LeetCode] Palindrome Linked List
  8. LeetCode 1053. 交换一次的先前排列
  9. entity framework使用技巧
  10. Swift 枚举简单使用
  11. PCL——连接两个点云的字段
  12. python去除读取文件中多余的空行
  13. 易控INSPEC软件与欧姆龙PLC以太网通讯
  14. 熊猫TV技术与直播技术相关
  15. linux下gbd调试基础
  16. Spring Security 实战内容:实现自定义退出登录
  17. 中关村e谷为产业搭台:中关村论坛(空天专场)黑科技亮相现场
  18. oracle体育成绩字段,在Excel中利用自定义函数处理体育达标成绩
  19. C++ 三维空间的点(继承)
  20. HP前中国CEO孙振耀:关于工作与生活

热门文章

  1. 李宏毅机器学习笔记4:Brief Introduction of Deep Learning、Backpropagation(后向传播算法)...
  2. 实现图片预览效果及模糊效果
  3. 实现一个网易云音乐的 BottomSheetDialog
  4. Mac系统Git生成ssh公钥
  5. 时序列数据库武斗大会之 TSDB 名录 Part 1
  6. 中端存储趋势:x86、SSD缓存和虚拟化
  7. Smarty3 配置
  8. Shell 定时清理小脚本
  9. 你应该在开始API开发之前知道的事(下)(翻译)
  10. ActiveMQ学习总结(10)——ActiveMQ采用Spring注解方式发送和监听