javascript基礎:函式傳遞引數的方式、引數陣列、變數範圍(變數作用域)
阿新 • • 發佈:2019-02-19
一、函式的2種引數傳遞方式
(1)傳值:把變數的值傳入函式,函式不會另外分配記憶體儲存值,所以不會改變原始值,一般適用於傳入 數字、布林值、字串。
(2)傳地址:把變數儲存的記憶體地址傳入,如果在函式中改變了值,原始值也會被改變。用於傳入物件、陣列、函式、字串物件。
<!doctype html> <html> <head> <meta charset="gb2312"> <title>實驗</title> <script language="javascript"> //帶2個引數,返回值,a為傳值方式,b為傳地址方式 function f2(a,b) { b.sellNum = a; b.amount = a* b.price; return b.amount; } //不帶引數,無返回值 function f1() { var r; var product = new Object(); product.name = "男士褲衩30#"; product.price = 25.8; product.sellNum = 0; product.amount = 0.0; //傳值:10,傳地址:product r = f2(10,product); document.write(product.name +'(銷量):' + product.sellNum+"<br>"); document.write(product.name +'(銷售金額):' + r+"<br><hr>"); //打印出product物件的 屬性名稱:屬性值 //發現數據已經被修改。 for(r in product) document.write("<br>"+r+":"+product[r]); } </script> </head> <body> <script language="javascript"> f1(); </script> </body> </html>
二、函式的引數陣列、變數範圍
javascript的函式,都有一個引數陣列,也就是arguments物件,儲存了傳入函式的初始引數值。
javascript的變數範圍包括:全域性變數、函式內的區域性變數。不過,在函式內也能引用全域性變數,比如下面程式碼中的變數C,可以在函式內修改。
<!doctype html> <html> <head> <meta charset="gb2312"> <title>實驗</title> <script language="javascript"> //全域性變數 var a,b,c; a = 10; b = 20; c = 30; //帶2個引數,返回值 function f2(a,b,xx,yy,zz) { //區域性變數a,覆蓋了傳入引數a的值 var a = 0; a = 1000; //修改全域性變數 c = 200; document.write("f2函式的個數:"+f2.arguments.length); //傳入引數的初始值,不會受到全域性變數和自定義變數的影響 for (i in f2.arguments ) { document.write("<br>f2函式的第"+i+"個引數的值:"+f2.arguments[i]); } document.write('<br><hr>區域性變數'); document.write('<br>a:'+a); document.write('<br>b:'+b); } </script> </head> <body> <script language="javascript"> f2(5,4,3,2,1); //全域性變數 document.write('<br><hr>全域性變數'); document.write('<br>a:'+a); document.write('<br>b:'+b); document.write('<br>c:'+c); </script> </body> </html>