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