请问这道笔试题,怎么解释合理
发布于 5 年前 作者 JingMo 5043 次浏览 来自 问答

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 回复

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


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/求值策略

谢谢

回到顶部