值传递:值传递只是把对象的值传入函数,函数中使用的是这个值,而那个对象的值并不会变。
c语言示例:
void a(int v) { printf(v); v++; printf(v); } void main() { int b = 0; a(b); printf(b); }
程序输出结果是 010 。
这里b的值在a函数中被调用,但是b本身没变。其实值传递相当于在函数中新建了一个对象然后对它赋值再使用。在上例中相当于:
void a(int v) { int b = v; printf(b); b++; printf(b); }
js语言示例:
js中基本类型变量的复制是值传的:
var num1=5; var num2=num1; num1++; console.log(num1+";"+num2);
结果是6;5。
引用传递:引用传递是将整个对象本身(或地址)传入函数,函数中既可以调用对象的值,还可以改变对象的值。
c语言示例:
void a(int* v) { //传入的参数为指针 printf(*v); *v++; printf(*v); } void main() { int b = 0; a(&b); //&的意思是取b的地址(指针) printf(b); }
这里输出结果是011。说明b的值在函数中被改变了。
js示例:
var obj1=new Object(); obj1.name="syt123"; var obj2=obj1; console.log(obj2.name);//syt123 obj2.name="123"; console.log(obj1.name);//123