1. 程式人生 > >javascript基礎:函式傳遞引數的方式、引數陣列、變數範圍(變數作用域)

javascript基礎:函式傳遞引數的方式、引數陣列、變數範圍(變數作用域)

一、函式的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>