函数补充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>