CNode

请问这道笔试题,怎么解释合理

问答
JJingMo发布于6 年前最后回复6 年前2 回复5638 浏览0 收藏

var a={name:"hello"}, b={name:"hi"} function exchange(a, b){ var c=b; b=a; a=c; a.name=a.name+"1"; b.name=b.name+"2"; console.info(a.name,b.name); } exchange(a, b); console.info(a.name, b.name);

输出: hi1 hello2 hello2 hi1

查看回复

回复 (2)

J
JingMo#1·6 年前

谢谢

T
ty4z2008#2·6 年前

我改了一下你的代码,这样好理解一点。 这里面考察了传共享对象调用,当修改是会对原值产生影响,而完全赋值是会开辟一个新的内存区域,在这个区间内访问的是新的内存区域,而外部访问的是另一块内存区域


var a={name:'hello',a:1}, b={name:'hi',b:2}
function exchange(new_a, new_b){
	var intermediate_area=new_b;
	 new_b=new_a; 
	 new_a=intermediate_area;
	new_a.name=new_a.name+'1';//此时a是指向b的空间地址{name:'hi'} 

	new_b.name=new_b.name+'2';//b指向a的空间地址{name:'hello'}
	console.log(new_a.name,new_b.name);//hi1 hello2,此时访问的是局部变量。这个变量只在exchange内部有效
}
exchange(a, b);//a和b都是以传指针的方式传入函数中

console.log(a.name, b.name);//hello1 hi2

这种方式不是js特有的,其他的编程语言也有 https://www.wikiwand.com/zh-hans/%E6%B1%82%E5%80%BC%E7%AD%96%E7%95%A5

参与回复
登录后即可参与回复。登录