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


    关于闭包函数的详解

    从技术的角度讲,所有的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
    

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

    • 优点,自调用,就是在函数里面调用自己.
    • 缺点,就是消耗大量内存
  • 相关阅读:
    Wpf 数据绑定实例2
    Wpf 数据绑定简介、实例1
    Wpf ListBox数据绑定实例1--绑定字典集合
    Wpf控件ListBox使用实例2
    阿里UX矢量图标库–最强大的矢量图标库(Icon font制作力荐工具)
    Web字体工具整理,网页图标字体以及使用方法整理
    ICOMOON!强悍的WEB字体图标制造器/Web字体使用实例
    window.applicationCache事件,介绍
    HTML5 离线缓存忽略主页实例
    条件注释判断浏览器版本<!--[if lt IE 9]>(转载)
  • 原文地址:https://www.cnblogs.com/zhaohongcheng/p/10846401.html
Copyright © 2020-2023  润新知