函数补充02(深入)递归函数、函数的属性和方法、js垃圾回收

 1 <script>
 2     //一、递归函数
 3     //函数调用自身函数
 4     //使用递归时候不要无效的去调用自身函数,容易造成内存溢出
 5     //使用递归,函数内部需要有退出条件,不能无限制调用递归
 6 
 7 
 8     //这里会无限制的调用自身,没有退出、中断条件
 9     /*  function fi(){
10          console.log(1);
11          f1();
12      }
13      f1(); */
14 
15     /* 
16     递归函数案例:
17     阶乘1*2*3*4*5*6*7...
18     1.创建一个函数,函数需要写出想要的结果
19     2、递归函数必须要有一个结束条件,不能无限调用
20     3、递归函数是从最里面开始计算
21     
22     
23     */
24 
25     function countNum(num) {
26 
27         if (num == 1) {
28             return 1
29         }
30         return num * countNum(num - 1);
31     }
32     console.log(countNum(5));
33 
34 
35     //二、函数的属性和方法
36     function f1() { };
37     //1·name  返回函数名称
38     // console.log(f1.name);
39     let f2 = function fgest() { };
40     console.log(f2.name);//fgest  返回最初的函数
41 
42     //2.length  返回函数的参数个数
43     function f3(a, b, c) { var name = 'lisi' }
44     console.log(f3.length);
45 
46     //3.toString()  把函数作为字符串返回
47     console.log(f3.toString());
48 
49 
50     //三、定义在函数外面的属于全局变量,定义在函数内部的属于局部变量
51     var v1 = "v1"; // 全局变量
52     function f4() {
53         var v1 = "fv1"; // 局部变量,只能在函数内部使用 
54         console.log(v1);
55     }
56     f4();
57     console.log(v1);
58     // 2. js var声明存在遍历提升,js编译的时候会把变量声明提取到文件的开头位置。
59     console.log(name, '---');   // var name;
60     var name = "name1";
61     // 3. 函数存在函数提升。 js编译的时候会把函数提到文件的开头位置。
62     // 尽量不要用变量或函数提升的特效,还是养成先声明再使用的习惯。
63     f5();
64     function f5() {
65         console.log("f5")
66     }
67     // 4. js的垃圾回收(变量在内存里面的销毁):js自动有一套垃圾回收机制。
68     // js变量不使用的时候,使用完成后会自动销毁。主要是局部变量,使用完成后会自动销毁。全局变量则是应用关闭才会销毁。
69     function f6() {
70         var name = "a1"; // name变量会在函数调用完成以后自动从内存释放。
71     }
72     f6();
73 
74     f6 = undefined; // 可以用undefined或者null手动释放全局变量。
75 
76 
77 </script>

 

 

posted @ 2022-08-09 17:08  YBYZ  阅读(32)  评论(0)    收藏  举报