可以通過arguments對象來實現可變的參數
在函數代碼中,使用特殊對象 arguments,開發者無需明確指出參數名,就能訪問它們。
arguments是一個數組對象,可以通過下標來實別參數的位置,通過.length來獲參數的個數。
代碼實例:我們通過arguments來改變函數的默認參數
1 <script> 2 function demo(x,y){ 3 x = arguments[0]?arguments[0]:1; //arguments[0]代表demo函數的參數第一個 4 y = arguments[1]?arguments[1]:2; //arguments[1]代表demo函數的參數第二個 5 return x+y 6 } 7 alert(demo(4,5)) //我們調用函數的參數=>9 8 alert(demo()) //我們調用默認參數 =>3 9 </script>
代碼實例:通過arguments.length來獲取參數的長度所實現的參數和
1 <script> 2 function demo(){ 3 var count = arguments.length //把參數的長度保存的count的變量中 4 var sum =0 //聲名一個總和的變量 5 for(var i =0;i<count;i++){ //使用for循環把所有參數的長度遍歷出來 6 sum+=arguments[i] //求出每個arguments所對應下標的參數的值相加 7 } 8 return sum //把值返回給函數 9 } 10 alert(demo(1,2,3,4,5,6)) //=>把自己定義的參數傳入,=>21 11 </script>
代碼實例:通過arguments.length再來獲取參數的長度所實現的參數最大值
1 <script> 2 function demo(){ 3 var count = arguments.length //把參數的長度保存的count的變量中 4 var max =0 //聲名一個最大值 5 for(var i =0;i<count;i++){ //使用for循環把所有參數的長度遍歷出來 6 if(arguments[i]>max){ //做一個if語句的判斷,遍歷出來所有最大值依次給與max,直接便利結束 7 max = arguments[i] 8 } 9 } 10 return max //把值返回給函數 11 } 12 alert(demo(10,20,1,4,11)) //=>把自己定義的參數傳入,=>20 13 </script>
變量的作用域:
全局變量和局部變量的區別:
全局在函數體外聲名,從腳開始可以用到腳本結束。
局部變量在函數體內聲名變量只能在函數體內進行使用。
代碼示例:
1 <script> 2 var x = "全局變量x"; 3 function demo(){ 4 var x = "局部變量x"; 5 alert(x) 6 } 7 demo() //=>先是彈出局布變量x,因為我們調用函數執行代碼塊,因為x是在函數體內聲名的與全局變量不沖突 8 alert(x) //=>再是彈出全局變量x,因為我們是在函數體外alert(x),只能調用到全局函數的變量,當函數執行完成,自動會回收掉函數體的內容 9 </script>
最好使用var語句來聲名變量:
代碼示例 :
1 <script> 2 var x =1 3 function demo(){ 4 x =2 //如果函數體內變量沒有加var關鍵字,則這個變量則自動變為全局變量 5 alert(x) 6 } 7 demo() //=>輸出結果為2 8 alert(x) //=>此時輸出結果也為2,因為函數體內的變量用的是全局變量,變量重名賦值時會被覆蓋掉 9 </script>
用一段混合型的代碼示列來全面解析全局變量和局部變量
1 <script> 2 //解析一下全局變量和局部變量 3 var x = 1,y =2; //這是在script腳本內,函數體外聲明的兩個全局變量x和y 4 function demo(x,y){ 5 document.write(x) //=>undefined 因為在調用函數的時候沒有寫入參數,沒有值的參數默認為undefined 6 document.write(y) //同上 7 var x = 5,y =6; //在此在函數體內聲明了兩個局部變量x和y 8 document.write(x) //由於js代碼是從上到下執行的,此時的x用的是局部變量x 9 document.write(y) //同上 10 z =x+y //在函數體內聲明了一個沒有加var的z,此是它是全局變量,但是由是在函數體內賦值,用的x,y都是局部變量 11 document.write(z) //=>輸出結果為11 12 } 13 demo() 14 alert(z) //由於z是全局變量,還是可以在函數外取到z的值 =>11 15 alert(x) //=>1 在函數體外得到x,得到的是全局變量x 16 alert(y) //同上 17 </script>