函数细节
- 2020 年 7 月 22 日
- 筆記
- javascript
1 <script> 2 //有参函数与无参函数 3 /*无参函数*/ 4 function add(){ 5 var a = 10; 6 var b = 20; 7 var c = a + b; 8 console.log(c); 9 } 10 add(); 11 12 /*有参函数*/ 13 function add2(d,e){ 14 var f = d + e; 15 console.log(f); 16 } 17 // add2(11,22); 18 // var a = +prompt("第一个加数"); 19 // var b = +prompt("第二个加数"); 20 // add2(a,b); 21 22 // 如果实参少于形参,没被赋值的形参就是undefined,可以在函数内部给他默认一个值,比如用if语句判断一下,给他赋值。 23 // 如果实参多于形参,正常情况下多余的实参会被忽略掉; 24 // 如果不想被忽略掉,想得到多余的实参,并参与运算怎么办? 25 // 需要借助函数内部的特殊对象:arguments 这是内置的对象(此对象是一个类数组对象:他是一个对象。 26 // 但是他的用法有点像数组,所以称之为类数组对象),只能在函数内部使用,外部无法使用 27 28 /*不定长参数的函数*/ 29 function add3(){ 30 var sum = 0; 31 for (var i = 0; i < arguments.length; i++){ 32 sum += arguments[i]; 33 } 34 return sum; 35 } 36 37 var g = add3(1,2,3,4); 38 console.log(g); 39 40 function add4(h, k){ 41 console.log(h, k); //3 5 42 console.log(arguments[0], arguments[1]); //3 5 43 h = 22; 44 console.log(h, k); //22 5 45 console.log(arguments[0], arguments[1]); //22 5 46 //结论:arguments对象的数据和形参之间是相互映射的关系,两者指向同一个地址空间,任何一方发生改变,都会影响另一方跟着改变。 47 } 48 49 add4(3,5,6,7,8,9); 50 51 52 53 // 函数的重载:即同一个作用域下的两个同名函数。(在两个不同文件中出现同名函数,只要他们不整合到一起,就没有影响) 54 /* 55 在很多编程语言中,在同一个作用域中允许出现两个或多个同名不同参的函数,且互不影响,这种现象叫重载。 56 但是在JavaScript中,如果出现两个或多个同名函数(不论参数的个数是否相同),后面的都会覆盖前面的同名函数。 57 */ 58 function welcome(){ 59 console.log("Hello!!!!!!"); 60 } 61 62 function welcome(name){ 63 console.log("Hello",name); 64 } 65 66 welcome(); //Hello undefined 67 welcome("小明"); //Hello 小明 68 69 70 71 //作用域 72 /* 73 ES5中只存在两种变量的作用域:(即可使用的范围) 74 1、全局变量 函数外部 75 2、局部变量 函数内部 76 最佳实践:尽量减少全局变量,避免命名冲突。因为如果两个人在同一个脚本的 77 不同函数中使用了相同的全局变量名,就很容易导致不可预测的结果和难以察觉的 bug。 78 一定记得使用 var 声明变量,避免一个变量未经声明就来使用。否则即使是在函数内部,变量也会自动提升为全局变量。 79 */ 80 var hi = "Hello"; 81 function come(){ 82 var msg = "Hello!!!"; 83 console.log(msg); //ok,没问题。可访问的 84 console.log(hi); //ok,没问题。可访问的 85 } 86 87 come(); 88 console.log(hi); //没问题,可访问的 89 console.log(msg); //报错,不可访问的 90 //结论:变量查找原则:就近原则。 如果找不到,就向其父级作用域寻找,直到找到全局作用域还没找到就报错。 91 // 变量访问:里面可以访问到外面,外面无法访问里面。 92 // 相同作用域下定义同名变量,后面的会覆盖掉前面的。 不同作用域下定义同名变量,互不影响。 93 </script>