请问这道笔试题,怎么解释合理
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/求值策略
谢谢