function changeStuff(num, obj1, obj2)
{
num = num * 10;
obj1.item = "changed";
obj2 = {item: "changed"};
}
var num = 10;
var obj1 = {item: "unchanged"};
var obj2 = {item: "unchanged"};
changeStuff(num, obj1, obj2);
console.log(num); // 10
console.log(obj1.item); // changed
console.log(obj2.item); // unchanged
为什么是这个情况?
js所有的传递都是值传递
无耻的贴一篇自己的文章,是根据《js高程》自己总结的,看2.传递参数
JavaScript中所有参数的传递均是值传递
第一个输出: 这个函数对变量num唯一的操作,就是将他的值赋给了num参数.你的函数只是对参数操作,而没有对变量操作.如果是引用传递,那么num的值应该为100.然而并没有
第二个输出: obj1.item = "changed";更改了obj1的item属性.而obj2 = {item: "changed"}又对参数赋值了另一个新创建的对象,所以你的函数并没有对obj2对象进行任何操作.之所以是这样的原因,正好说明了参数的值传递.
详细原因见<JavaScript高级程序设计>
旧答案错了。刚看了下js高程,里面说的很清楚是传值得额。。
js高程上面有详细讲,js函数都是按值传递参数的。
js中的所有参数传递都是传值,但是这个传值你要理解的一点是:基本数据类型的传值是指的复制值,引用类型传值指的是地址传递,为什么会传递地址呢?因为保存在栈中的变量保存的是地址,所以它传递的肯定是地址。
基本类型是传值,引用类型是传址
终于搞明白了,是call by shareing.就是分享,共享,共享值,共享地址,一切都豁然开朗了