php 闭包 递归,关于闭包函数和递归函数的详细理解

#关于闭包函数的详解 ####从技术的角度讲,所有的JavaScript函数都是闭包:它们都是对象,它们都关联到作用域链。当函数可以记住并访问所在的词法作用域时,就产生了闭包,即使函数是在当前词法作用域之外执行。

###闭包的作用 ####闭包的应用比较典型是定义模块,我们将操作函数暴露给外部,而细节隐藏在模块内部。

function fn1() {

var name = 'iceman';

function fn2() {

console.log(name);

}

return fn2;

}

var fn3 = fn1();

fn3();

这样就清晰地展示了闭包:

fn2的词法作用域能访问fn1的作用域

将fn2当做一个值返回

fn1执行后,将fn2的引用赋值给fn3

执行fn3,输出了变量name

####我们知道通过引用的关系,fn3就是fn2函数本身。执行fn3能正常输出name,这不就是fn2能记住并访问它所在的词法作用域,而且fn2函数的运行还是在当前词法作用域之外了。

正常来说,当fn1函数执行完毕之后,其作用域是会被销毁的,然后垃圾回收器会释放那段内存空间。而闭包却很神奇的将fn1的作用域存活了下来,fn2依然持有该作用域的引用,这个引用就是闭包。

总结:一个函数在内部无法被调用,利用外部的函数返回值return让内部函数可以被调用。

#关于递归函数的详细理解 ###递归算法是一种看似简单,但逻辑性比较复杂的算法, #####一般用if需要设置好递归函数的结束条件,不然容易陷入死循环。

function f(n) {

if (n <= 1){

// console.log(1111);

return 1;

}else {

// console.log(n * f(n-1));

return n * f(n-1);

}

}

console.log(f(10)); // 3628800

这样就清晰地展示了递归函数的运算: 递归的特点总结:

优点,自调用,就是在函数里面调用自己.

缺点,就是消耗大量内存

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值