函數細節
- 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>