作用域链,递归函数

46 阅读1分钟

访问变量时,如果当前作用域没有找到该变量,会一级一级往上层作用域查找,直到找到

    var num = 100;
    function fn() {
        function fn1() {
            console.log(num)     
        }
        fn1()
    }
    fn()

只赋值不声明时,往上层找变量的声明,没找到的话 num 会成为全局变量

     function fn() {
         var num
         function fn1() {
             num = 1000;     
         }
         fn1()
         console.log(num);
     }
     fn()
     console.log(num)
  

递归函数:在函数内部调用自身的函数.

递归函数内部应该写上返回点(到某个条件时,停止递归)

用递归函数计算 n 的阶乘

    function fn(n) {
        if (n === 1) return 1
        return n * fn(n - 1)
    }
    console.log(fn(4));

斐波那契数列 数列: 1 1 2 3 5 8 13 21... 前两位是1 第三位开始的每一位是前两位之和 求数列第 n 位是多少

    function fs (n) {
        if (n === 1 || n === 2) return 1
        return fs(n-1)+fs(n-2)
    }
    console.log(fs(10));    //输入数字太大的话,浏览器算不出来