JavaScript函数表达式_递归函数_闭包

一、递归函数 (自己调用自己)

案例1:写了一个fn函数,函数内部再return(返回)fn函数

分析:

口诀:正执行 反推
因此,结果为1+2+3+4+5=15。

案例2:阶层-递归函数

分析:

因此,结果为123=6。

二、闭包
1》什么是闭包
a) 函数中还有一个函数

首先fn1是一个函数,其次fn1函数内部还有一个return函数,即函数中还有一个函数,便产生了一个闭包现象。

#现在打印fn1,那么结果应该是这个return函数体

#若要执行return函数内的代码,则需要弹出fn1()()
(执行第一个括号:把0赋给num ;添加第二个括号:执行num++)

因此0++变为1,最后返回1.

#多次执行(弹出)fn1()(),结果只会打出1 (为什么43行弹出的不是递增的数?)

首先41行第一次执行fn1()() ,0++变为1,最后返回1.
其次43行再一次执行fn1()() ,那么会重新赋值为0(34行),而不是从1往后累加,因此两次弹出的结果都只会是1.

#实现累加效果,依次递增弹出
解决方法:让50行的0赋给num只执行一次,再不断执行num++即可
首先将fn1赋给变量fn,那么fn会保存fn1函数里面(内部)的代码(蓝色区域)

然后,每次只执行fn变量(return的function(红色区域)),则实现累加。

b) for循环中还有一个函数
先在HTML文件中写好ul、li

获取所有的li,再给每一个li添加一个单击事件,然后再添加for循环

68行打印这个i,打开控制台,显示0,1,2,没有问题。

但是无论点哪个li都只会弹出3(70行的i弹出的都是循环完的结果),为什么?

因为:现在第72行的i是在函数中的,而在函数中并没有写i=?,因此这里的i在本层没有,那么需要往上找
比如72行没有,71行也没有,再找74行也没有,69行没有……

但其实,在74行就已经可以找到i了(因为它在for循环中),但是这个i已经执行完毕了,因此点击弹出的才是3.

#添加index属性

结果:

2》闭包的优点
内部函数有权访问,外部函数的局部变量。
3》闭包的缺点
(优点:有权访问导致)变量会驻留在内存中,导致存储变量不会立刻销毁。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值